/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . fir . types Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind Ċ import Ġorg . jetbrains . kotlin . descriptors . Modal ity Ċ import Ġorg . jetbrains . kotlin . fir . F ir Session Ċ import Ġorg . jetbrains . kotlin . fir . declarations . expanded Con e Type Ċ import Ġorg . jetbrains . kotlin . fir . declarations . super Con e Types Ċ import Ġorg . jetbrains . kotlin . fir . resolve . to Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Class Like Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Class Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Type Parameter Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Class Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Type Alias Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . impl . F ir Type Parameter Symbol Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . Con e Abbre vi ated Type Impl Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . Con e ClassType Impl Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . Con e FunctionType Impl Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . Con e Type ParameterType Impl Ċ import Ġorg . jetbrains . kotlin . types . checker . convert Variance Ċ import Ġorg . jetbrains . kotlin . types . model .* ĊĊ Ċ class ĠError Type Constructor ( reason : ĠString ) Ġ: ĠType Constructor Marker Ċ Ċ interface ĠC one Type Context Ġ: ĠType System Context , ĠType System Optimization Context Ġ{ ĊĠĠĠ Ġval Ġsession : ĠF ir Session ĊĊĠĠĠ Ġoverride Ġfun ĠKotlin Type Marker . as Simple Type (): ĠSimple Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġas ? ĠC one Lookup Tag Based Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠKotlin Type Marker . as Flex ible Type (): ĠFlex ible Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġas ? ĠC one Flex ible Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠKotlin Type Marker . isError (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġis ĠC one Class ErrorType Ġ|| Ġthis Ġis ĠC one Kotlin ErrorType Ġ|| Ġthis . type Constructor () Ġis ĠError Type Constructor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠFlex ible Type Marker . as Dynamic Type (): ĠDynamic Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠFlex ible Type Marker . as Raw Type (): ĠRaw Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠFlex ible Type Marker . upper Bound (): ĠSimple Type Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Flex ible Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . upper Bound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠFlex ible Type Marker . lower Bound (): ĠSimple Type Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Flex ible Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . lower Bound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . as Capt ured Type (): ĠCapt ured Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . as Def initely NotNull Type (): ĠDef initely NotNull Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . is Marked Nullable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . null ability . is Nullable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . with Null ability ( nullable : ĠBoolean ): ĠSimple Type Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( null ability . is Nullable Ġ== Ġnullable ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Type ParameterType Ġ-> ĠC one Type ParameterType Impl ( lookup Tag , Ġnullable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Class ErrorType Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one ClassType Ġ-> ĠC one ClassType Impl ( lookup Tag , Ġtype Arguments , Ġnullable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Abbre vi ated Type Ġ-> ĠC one Abbre vi ated Type Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlookup Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one FunctionType Ġ-> ĠC one FunctionType Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Types , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlookup Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . type Constructor (): ĠType Constructor Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠC one Class ErrorType ) Ġreturn ĠError Type Constructor (" No Ġconstructor : Ġ$ reason ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . lookup Tag . to Symbol ( session ) Ġ?: ĠError Type Constructor (" Un resolved : Ġ${ this . lookup Tag }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . arguments Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . type Arguments . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . get Argument ( index : ĠInt ): ĠType Argument Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Lookup Tag Based Type ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . type Arguments [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠKotlin Type Marker . as Type Argument (): ĠType Argument Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠCapt ured Type Marker . lower Type (): ĠKotlin Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Argument Marker . is Star Projection (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type Projection ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġis ĠC one Star Projection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Argument Marker . get Variance (): ĠType Variance Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type Projection ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProjection Kind . STAR Ġ-> Ġerror (" N ek orre kt no Ġ( c ) ĠSt as ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProjection Kind . IN Ġ-> ĠType Variance . IN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProjection Kind . OUT Ġ-> ĠType Variance . OUT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProjection Kind . IN VARIANT Ġ-> ĠType Variance . INV ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Argument Marker . getType (): ĠKotlin Type Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type Projection ) ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Typed Projection ) Ġ{ Ġ" No Ġtype Ġfor ĠStar Projection " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . parameters Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Type Parameter Symbol Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Class Symbol Ġ-> Ġfir . type Parameters . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Type Alias Symbol Ġ-> Ġfir . type Parameters . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" ? !: 1 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . getParameter ( index : ĠInt ): ĠType Parameter Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Type Parameter Symbol Ġ-> Ġerror (" ? !: 1 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Class Symbol Ġ-> Ġfir . type Parameters [ index ]. symbol ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Type Alias Symbol Ġ-> Ġfir . type Parameters [ index ]. symbol ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" ? !: 1 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . sup ert ypes (): ĠCollection < Kotlin Type Marker > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC one Type Parameter Symbol Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Class Symbol Ġ-> Ġfir . super Con e Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Type Alias Symbol Ġ-> ĠlistOf NotNull ( fir . expanded Con e Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" ? !: 1 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is Intersection (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is ClassType Constructor (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġis ĠF ir Class Symbol ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Parameter Marker . get Variance (): ĠType Variance Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠF ir Type Parameter Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . fir . variance . convert Variance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Parameter Marker . upper Bound Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠF ir Type Parameter Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . fir . bounds . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Parameter Marker . get Upper Bound ( index : ĠInt ): ĠKotlin Type Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠF ir Type Parameter Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . fir . bounds [ index ]. cone Type Unsafe () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Parameter Marker . getType Constructor (): ĠType Constructor Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠF ir Type Parameter Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Equal Type Construct ors ( c 1 : ĠType Constructor Marker , Ġc 2 : ĠType Constructor Marker ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( c 1 Ġis ĠError Type Constructor Ġ|| Ġc 2 Ġis ĠError Type Constructor ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġrequire ( c 1 Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġrequire ( c 2 Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġc 1 Ġ== Ġc 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is Den ot able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue Ġ// ĠTODO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is Common Final Class Constructor (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġval Ġclass Symbol Ġ= Ġthis Ġas ? ĠC one Class Symbol Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġfir Ġ= Ġ( class Symbol Ġas ĠF ir Class Symbol ). fir ĊĠĠĠĠĠĠĠ Ġreturn Ġfir . modal ity Ġ== ĠMod ality . FINAL Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfir . class Kind Ġ!= ĠClass Kind . ENUM _ ENTRY Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfir . class Kind Ġ!= ĠClass Kind . AN NOT ATION _ CLASS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcapture From Arguments ( type : ĠSimple Type Marker , Ġstatus : ĠCapture Status ): ĠSimple Type Marker ? Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . as ArgumentList (): ĠType ArgumentList Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġidentical Arguments ( a : ĠSimple Type Marker , Ġb : ĠSimple Type Marker ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( a Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġrequire ( b Ġis ĠC one Lookup Tag Based Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġa . type Arguments Ġ=== Ġb . type Arguments ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is Any Constructor (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( this Ġis ĠC one Symbol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġis ĠC one Class Like Symbol Ġ&& Ġclass Id . asString () Ġ== Ġ" kotlin / Any " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠType Constructor Marker . is Nothing Constructor (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġis ĠC one Class Like Symbol Ġ&& Ġclass Id . asString () Ġ== Ġ" kotlin / Nothing " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠKotlin Type Marker . isNotNull Nothing (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( this Ġis ĠC one Kotlin Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Constructor (). is Nothing Constructor () Ġ&& Ġ! this . null ability . is Nullable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSimple Type Marker . is Single Classifier Type (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠ Ġ} Ċ } Ċ