/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . resolve . descriptor Util Ċ Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Kind .* Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotated Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotation Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Kotlin Retention Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Type Alias Constructor Descriptor Ċ import Ġorg . jetbrains . kotlin . incremental . components . Lookup Location Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Unsafe Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils . get Containing Class Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Constant Value Ċ import Ġorg . jetbrains . kotlin . resolve . constants . EnumValue Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Descriptor Kind Filter Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Type Projection Ċ import Ġorg . jetbrains . kotlin . types . Type Subst it utor Ċ import Ġorg . jetbrains . kotlin . types . Variance Ċ import Ġorg . jetbrains . kotlin . types . checker . Kotlin Type Checker Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Any Or Nullable Any Ċ import Ġorg . jetbrains . kotlin . types . type Util . make Nullable Ċ import Ġorg . jetbrains . kotlin . utils . DFS Ċ import Ġorg . jetbrains . kotlin . utils . Smart List Ċ Ċ private Ġval ĠRET ENT ION _ PARAMETER _ NAME Ġ= ĠName . identifier (" value ") Ċ Ċ fun ĠClass Descriptor . getClass Object Reference Target (): ĠClass Descriptor Ġ= Ġcompanion Object Descriptor Ġ?: Ġthis Ċ Ċ fun ĠDeclaration Descriptor . get Import able Descriptor (): ĠDeclaration Descriptor Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ġis ĠType Alias Constructor Descriptor Ġ-> Ġcontaining Declaration ĊĠĠĠĠĠĠĠ Ġthis Ġis ĠConstructor Descriptor Ġ-> Ġcontaining Declaration ĊĠĠĠĠĠĠĠ Ġthis Ġis ĠProperty Accessor Descriptor Ġ-> Ġcorresponding Property ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠDeclaration Descriptor . fq Name Unsafe : ĠF q Name Unsafe ĊĠĠĠ Ġget () Ġ= ĠDescriptor Utils . getF q Name ( this ) Ċ Ċ val ĠDeclaration Descriptor . fq Name Safe : ĠF q Name ĊĠĠĠ Ġget () Ġ= ĠDescriptor Utils . getF q Name Safe ( this ) Ċ Ċ val ĠDeclaration Descriptor . is Extension : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġthis Ġis ĠCallable Descriptor Ġ&& Ġextension Receiver Parameter Ġ!= Ġnull Ċ Ċ val ĠDeclaration Descriptor . module : ĠModule Descriptor ĊĠĠĠ Ġget () Ġ= ĠDescriptor Utils . get Containing Module ( this ) Ċ Ċ fun ĠModule Descriptor . resolve TopLevel Class ( top Level Class Fq Name : ĠF q Name , Ġlocation : ĠLookup Location ): ĠClass Descriptor ? Ġ{ ĊĠĠĠ Ġassert (! top Level Class Fq Name . is Root ) ĊĠĠĠ Ġreturn Ġget Package ( top Level Class Fq Name . parent ()). member Scope . get Cont ributed Classifier ( top Level Class Fq Name . short Name (), Ġlocation ) Ġas ? ĠClass Descriptor Ċ } Ċ Ċ val ĠClass ifier Descriptor WithType Parameters . den oted Class Descriptor : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠClass Descriptor Ġ-> Ġthis ĊĠĠĠĠĠĠĠ Ġis ĠType Alias Descriptor Ġ-> Ġclass Descriptor ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Unexpected Ġdescriptor Ġkind : Ġ$ this ") ĊĠĠĠ Ġ} Ċ Ċ val ĠClass ifier Descriptor WithType Parameters . class Id : ĠClass Id ? ĊĠĠĠ Ġget () Ġ= Ġcontaining Declaration . let Ġ{ Ġowner Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPackage Fragment Descriptor Ġ-> ĠClass Id ( owner . fq Name , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass ifier Descriptor WithType Parameters Ġ-> Ġowner . class Id ?. create Nested Class Id ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ val ĠClass ifier Descriptor WithType Parameters . has Companion Object : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġden oted Class Descriptor ?. comp anion Object Descriptor Ġ!= Ġnull Ċ Ċ val ĠClass Descriptor . hasClass Value Descriptor : ĠBoolean Ġget () Ġ= Ġclass Value Descriptor Ġ!= Ġnull Ċ Ċ val ĠClass ifier Descriptor WithType Parameters . class Value Descriptor : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġden oted Class Descriptor ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . kind . is Singleton ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . comp anion Object Descriptor ĊĠĠĠ Ġ} Ċ Ċ val ĠClass ifier Descriptor WithType Parameters . class ValueType Descriptor : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġden oted Class Descriptor ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOBJECT Ġ-> Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEN UM _ ENTRY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġenum Ġentry Ġhas Ġthe Ġtype Ġof Ġenum Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġthis . containing Declaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( container Ġis ĠClass Descriptor Ġ&& Ġcontainer . kind Ġ== ĠEN UM _ CLASS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġit . comp anion Object Descriptor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ /** ĠIf Ġa Ġliteral Ġof Ġthis Ġclass Ġcan Ġbe Ġused Ġas Ġa Ġvalue , Ġreturns Ġthe Ġtype Ġof Ġthis Ġvalue Ġ*/ Ċ val ĠClass Descriptor . class ValueType : ĠKotlin Type ? ĊĠĠĠ Ġget () Ġ= Ġclass ValueType Descriptor ?. default Type Ċ Ċ val ĠDeclaration Descriptor With Visibility . is Effect ively Public Api : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġeffective Visibility (). public Api Ċ Ċ val ĠDeclaration Descriptor With Visibility . is Effect ively Private Api : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġeffective Visibility (). private Api ĊĊ Ċ val ĠDeclaration Descriptor . is Inside Private Class : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġcontaining Declaration Ġas ? ĠClass Descriptor ĊĠĠĠĠĠĠĠ Ġreturn Ġparent Ġ!= Ġnull Ġ&& ĠVis ibilities . is Private ( parent . visibility ) ĊĠĠĠ Ġ} ĊĊ Ċ fun ĠClass Descriptor . get Super Class Not Any (): ĠClass Descriptor ? Ġ{ ĊĠĠĠ Ġfor Ġ( sup ertype Ġin Ġdefault Type . constructor . sup ert ypes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Kotlin Built Ins . is Any Or Nullable Any ( sup ertype )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Classifier Ġ= Ġsup ertype . constructor . declaration Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . is Class Or Enum Class ( super Classifier )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper Classifier Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun ĠClass Descriptor . get Super Class Or Any (): ĠClass Descriptor Ġ= Ġget Super Class Not Any () Ġ?: Ġbuilt Ins . any Ċ Ċ fun ĠClass Descriptor . get Super Interfaces (): ĠList < Class Descriptor > Ġ= ĊĠĠĠĠĠĠĠ Ġdefault Type . constructor . sup ert ypes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ ĠKotlin Built Ins . is Any Or Nullable Any ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Classifier Ġ= Ġit . constructor . declaration Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . is Interface ( super Classifier )) Ġsuper Classifier Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ val ĠClass Descriptor . secondary Construct ors : ĠList < Class Constructor Descriptor > ĊĠĠĠ Ġget () Ġ= Ġconstructors . filter Not Ġ{ Ġit . is Primary Ġ} Ċ Ċ val ĠDeclaration Descriptor . built Ins : ĠKotlin Built Ins ĊĠĠĠ Ġget () Ġ= Ġmodule . built Ins Ċ Ċ /** Ċ Ġ* ĠReturns Ġcontaining Ġdeclaration Ġof Ġdispatch Ġreceiver Ġfor Ġcallable Ġadjusted Ġto Ġfake - over ridden Ġcases Ċ Ġ* Ċ Ġ* Ġopen Ġclass ĠA Ġ{ Ċ Ġ* ĠĠ Ġfun Ġfoo () Ġ= Ġ 1 Ċ Ġ* Ġ} Ċ Ġ* Ġclass ĠB Ġ: ĠA () Ċ Ġ* Ċ Ġ* Ġfor ĠA . foo Ġ-> Ġreturns ĠA Ġ( dispatch Ġreceiver Ġparameter Ġis ĠA ) Ċ Ġ* Ġfor ĠB . foo Ġ-> Ġreturns ĠB Ġ( dispatch Ġreceiver Ġparameter Ġis Ġstill ĠA , Ġbut Ġit 's Ġfake - over ridden Ġin ĠB , Ġso Ġit 's Ġcontaining Ġdeclaration Ġis ĠB ) Ċ Ġ* Ċ Ġ* Ġclass ĠO uter Ġ{ Ċ Ġ* ĠĠ Ġinner Ġclass ĠInner () Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġfor Ġconstructor Ġof ĠO uter . Inner Ġ-> Ġreturns ĠO uter Ġ( dispatch Ġreceiver Ġparameter Ġis ĠO uter , Ġbut Ġit 's Ġcontaining Ġdeclaration Ġis ĠInner ) Ċ Ġ* Ċ Ġ*/ Ċ fun ĠCallable Descriptor . getOwner For Effective Dispatch Receiver Parameter (): ĠDeclaration Descriptor ? Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠCallable Member Descriptor Ġ&& Ġkind Ġ== ĠCallable Member Descriptor . Kind . FA KE _ OVERRIDE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Containing Declaration () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdispatch Receiver Parameter ?. containing Declaration Ċ } Ċ Ċ fun ĠValue Parameter Descriptor . decl ares Or In herits DefaultValue (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn ĠDFS . if Any ( ĊĠĠĠĠĠĠĠ ĠlistOf ( this ), ĊĠĠĠĠĠĠĠ Ġ{ Ġcurrent Ġ-> Ġcurrent . over ridden Descriptors . map ( Value Parameter Descriptor :: get Original ) Ġ}, ĊĠĠĠĠĠĠĠ ĠValue Parameter Descriptor :: decl ares DefaultValue ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠFunction Descriptor . has Or In herits Parameters With DefaultValue (): ĠBoolean Ġ= ĠDFS . if Any ( ĊĠĠĠĠĠĠĠ ĠlistOf ( this ), ĊĠĠĠĠĠĠĠ Ġ{ Ġcurrent Ġ-> Ġcurrent . over ridden Descriptors . map Ġ{ Ġit . original Ġ} Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġit . has Own Parameters With DefaultValue () Ġ} Ċ ) Ċ Ċ fun ĠFunction Descriptor . has Own Parameters With DefaultValue () Ġ= Ġoriginal . value Parameters . any Ġ{ Ġit . decl ares DefaultValue () Ġ} Ċ Ċ fun ĠAnnot ated . is Repeat able Annotation (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġannotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . repeat able ) Ġ!= Ġnull Ċ Ċ fun ĠAnnot ated . is Document ed Annotation (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġannotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . must Be Document ed ) Ġ!= Ġnull Ċ Ċ fun ĠAnnot ated . getAnnotation Retention (): ĠKotlin Retention ? Ġ{ ĊĠĠĠ Ġval Ġretention Argument Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . retention )?. all Value Arguments ?. get ( RET ENT ION _ PARAMETER _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ? ĠEnum Value Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠKotlin Retention . valueOf ( retention Argument Value . enum Entry Name . asString ()) Ċ } Ċ Ċ val ĠAnnot ated . non Source Annotations : ĠList < Annotation Descriptor > ĊĠĠĠ Ġget () Ġ= Ġannotations . filter Out Source Annotations () Ċ Ċ fun ĠIterable < Annotation Descriptor >. filter Out Source Annotations (): ĠList < Annotation Descriptor > Ġ= ĊĠĠĠ Ġfilter Not ( Annotation Descriptor :: is Source Annotation ) Ċ Ċ val ĠAnnotation Descriptor . is Source Annotation : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġannotation Class ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Descriptor Ġ== Ġnull Ġ|| Ġclass Descriptor . getAnnotation Retention () Ġ== ĠKotlin Retention . SOURCE ĊĠĠĠ Ġ} Ċ Ċ val ĠDeclaration Descriptor . parent sWith Self : ĠSequence < Declaration Descriptor > ĊĠĠĠ Ġget () Ġ= Ġgenerate Sequence ( this , Ġ{ Ġit . containing Declaration Ġ}) Ċ Ċ val ĠDeclaration Descriptor . parents : ĠSequence < Declaration Descriptor > ĊĠĠĠ Ġget () Ġ= Ġparent sWith Self . drop ( 1 ) Ċ Ċ val ĠCallable Member Descriptor . property If Accessor : ĠCallable Member Descriptor ĊĠĠĠ Ġget () Ġ= Ġif Ġ( this Ġis ĠProperty Accessor Descriptor ) Ġcorresponding Property Ġelse Ġthis Ċ Ċ fun ĠCallable Descriptor . fq Name OrNull (): ĠF q Name ? Ġ= Ġfq Name Unsafe . take If Ġ{ Ġit . is Safe Ġ} ?. to Safe () Ċ Ċ fun ĠCallable Member Descriptor . first Over ridden ( ĊĠĠĠĠĠĠĠ Ġuse Original : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġpredicate : Ġ( Callable Member Descriptor ) Ġ-> ĠBoolean Ċ ): ĠCallable Member Descriptor ? Ġ{ ĊĠĠĠ Ġvar Ġresult : ĠCallable Member Descriptor ? Ġ= Ġnull ĊĠĠĠ Ġreturn ĠDFS . dfs ( listOf ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġif Ġ( use Original ) Ġcurrent ?. original Ġelse Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ?. over ridden Descriptors Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠDFS . Abstract Node Handler < Callable Member Descriptor , ĠCallable Member Descriptor ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Children ( current : ĠCallable Member Descriptor ) Ġ= Ġresult Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Children ( current : ĠCallable Member Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull Ġ&& Ġpredicate ( current )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresult (): ĠCallable Member Descriptor ? Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠCallable Member Descriptor . set Single Over ridden ( over ridden : ĠCallable Member Descriptor ) Ġ{ ĊĠĠĠ Ġoverridden Descriptors Ġ= ĠlistOf ( over ridden ) Ċ } Ċ Ċ fun ĠCallable Member Descriptor . over ridden Tree As Sequence ( use Original : ĠBoolean ): ĠSequence < Callable Member Descriptor > Ġ= ĊĠĠĠ Ġwith ( if Ġ( use Original ) Ġoriginal Ġelse Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsequence Of ( this ) Ġ+ Ġoverridden Descriptors . as Sequence (). flatMap Ġ{ Ġit . over ridden Tree As Sequence ( use Original ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ fun Ġ< D Ġ: ĠCallable Descriptor > ĠD . over ridden Tree Unique As Sequence ( use Original : ĠBoolean ): ĠSequence < D > Ġ{ ĊĠĠĠ Ġval Ġset Ġ= Ġhash Set Of < D >() ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun ĠD . do Build Over ridden Tree As Sequence (): ĠSequence < D > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( if Ġ( use Original ) Ġoriginal Ġas ĠD Ġelse Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Ġin Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ġ+= Ġoriginal Ġas ĠD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( this ) Ġ+ Ġ( over ridden Descriptors Ġas ĠCollection < D >). as Sequence (). flatMap Ġ{ Ġit . do Build Over ridden Tree As Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdo Build Over ridden Tree As Sequence () Ċ } Ċ Ċ fun ĠCallable Descriptor . var arg Parameter Position () Ġ= ĊĠĠĠĠĠĠĠ Ġvalue Parameters . indexOf First Ġ{ Ġit . var arg ElementType Ġ!= Ġnull Ġ} Ċ Ċ /** Ċ Ġ* ĠWhen Ġ` Inner ` Ġis Ġused Ġas Ġtype Ġoutside Ġof Ġ` Outer ` Ġclass Ġall Ġtype Ġarguments Ġshould Ġbe Ġspecified , Ġe . g . Ġ` Outer < String , ĠInt >. Inner < Double >` Ċ Ġ* ĠHowever , Ġit 's Ġnot Ġnecessary Ġinside ĠO uter 's Ġmembers , Ġonly Ġthe Ġlast Ġone Ġshould Ġbe Ġspecified Ġthere . Ċ Ġ* ĠSo Ġthis Ġfunction Ġreturn Ġa Ġlist Ġof Ġarguments Ġthat Ġshould Ġbe Ġused Ġif Ġrelevant Ġarguments Ġweren 't Ġspecified Ġexplicitly Ġinside Ġthe Ġ[ scope Owner ]. Ċ Ġ* Ċ Ġ* ĠExamples : Ċ Ġ* Ġfor Ġ` Outer ` Ġclass Ġthe Ġmap Ġwill Ġcontain : ĠO uter Ġ-> Ġ( X , ĠY ) Ġ( i . e . Ġdefault Type Ġmapping ) Ċ Ġ* Ġfor Ġ` Derived ` Ġclass Ġthe Ġmap Ġwill Ġcontain : ĠDerived Ġ-> Ġ( E ), ĠO uter Ġ-> Ġ( E , ĠString ) Ċ Ġ* Ġfor Ġ` A . B ` Ġclass Ġthe Ġmap Ġwill Ġcontain : ĠB Ġ-> Ġ(), ĠO uter Ġ-> Ġ( Int , ĠCharSequence ), ĠA Ġ-> Ġ() Ċ Ġ* Ċ Ġ* Ġopen Ġclass ĠO uter < X , ĠY > Ġ{ Ċ Ġ* Ġ Ġinner Ġclass ĠInner < Z > Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* Ġclass ĠDerived < E > Ġ: ĠO uter < E , ĠString >() Ċ Ġ* Ċ Ġ* Ġclass ĠA Ġ: ĠO uter < String , ĠDouble >() Ġ{ Ċ Ġ* ĠĠ Ġinner Ġclass ĠB Ġ: ĠO uter < Int , ĠCharSequence >() Ċ Ġ* Ġ} Ċ Ġ*/ Ċ fun Ġfind Implicit OuterClass Arguments ( scope Owner : ĠClass Descriptor , Ġouter Class : ĠClass Descriptor ): ĠList < Type Projection >? Ġ{ ĊĠĠĠ Ġfor Ġ( current Ġin Ġscope Owner . classes From Inner To Outer ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sup ertype Ġin Ġcurrent . getAll Super Classes Types Include It self ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġsup ertype . constructor . declaration Descriptor Ġas ĠClass Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( class Descriptor Ġ== Ġouter Class ) Ġreturn Ġsup ertype . arguments ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun ĠClass Descriptor . classes From Inner To Outer () Ġ= Ġgenerate Sequence ( this ) Ġ{ ĊĠĠĠ Ġif Ġ( it . is Inner ) ĊĠĠĠĠĠĠĠ Ġit . containing Declaration . original Ġas ? ĠClass Descriptor ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġnull Ċ } Ċ Ċ private Ġfun ĠClass Descriptor . getAll Super Classes Types Include It self (): ĠList < Kotlin Type > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġarray ListOf < Kotlin Type >() ĊĠĠĠ Ġvar Ġcurrent : ĠKotlin Type Ġ= Ġdefault Type ĊĊĠĠĠ Ġwhile Ġ(! current . is Any Or Nullable Any ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . add ( current ) ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= ĠDescriptor Utils . get Super ClassType ( current . constructor . declaration Descriptor Ġas ĠClass Descriptor ) ĊĠĠĠĠĠĠĠ Ġcurrent Ġ= ĠType Subst it utor . create ( current ). substitute ( next , ĠVari ance . IN VARIANT ) Ġ?: Ġbreak ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun ĠFunction Descriptor . is Enum ValueOf Method (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġmethod Type Parameters Ġ= Ġvalue Parameters ĊĠĠĠ Ġval Ġnullable String Ġ= Ġbuilt Ins . string Type . make Nullable () ĊĠĠĠ Ġreturn ĠDescriptor Utils . ENUM _ VALUE _ OF Ġ== Ġname ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmethod Type Parameters . size Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠKotlin Type Checker . DEFAULT . is Subtype Of ( method Type Parameters [ 0 ]. type , Ġnullable String ) Ċ } Ċ Ċ val ĠDeclaration Descriptor . is Extension Property : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġthis Ġis ĠProperty Descriptor Ġ&& Ġextension Receiver Parameter Ġ!= Ġnull Ċ Ċ fun ĠClass Descriptor . getAll Super classes Without Any () Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Sequence ( get Super Class Not Any (), ĠClass Descriptor :: get Super Class Not Any ). to Collection ( Smart List < Class Descriptor >()) Ċ Ċ fun ĠClass ifier Descriptor . getAll Super Class ifiers (): ĠSequence < Classifier Descriptor > Ġ{ ĊĠĠĠ Ġval Ġset Ġ= Ġhash Set Of < Classifier Descriptor >() ĊĊĠĠĠ Ġfun ĠClass ifier Descriptor . do GetAll Super Classes And Interfaces (): ĠSequence < Classifier Descriptor > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( original Ġin Ġset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Sequence () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Ġ+= Ġoriginal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( original ) Ġ+ Ġtype Constructor . sup ert ypes . as Sequence (). flatMap Ġ{ Ġit . constructor . declaration Descriptor ?. do GetAll Super Classes And Interfaces () Ġ?: Ġsequence Of () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdo GetAll Super Classes And Interfaces () Ċ } Ċ Ċ // ĠNote Ġthis Ġis Ġa Ġgeneric Ġand Ġslow Ġimplementation Ġwhich Ġwould Ġwork Ġalmost Ġfor Ġany Ġsubclass Ġof ĠClass Descriptor . Ċ // ĠPlease Ġavoid Ġusing Ġit Ġin Ġnew Ġcode . Ċ // ĠTODO : Ġdo Ġsomething Ġmore Ġcle ver Ġinstead Ġat Ġcall Ġsites Ġof Ġthis Ġfunction Ċ fun Ġcompute Se aled Sub classes ( sealed Class : ĠClass Descriptor ): ĠCollection < Class Descriptor > Ġ{ ĊĠĠĠ Ġif Ġ( sealed Class . modal ity Ġ!= ĠMod ality . SE AL ED ) Ġreturn Ġempty List () ĊĊĠĠĠ Ġval Ġresult Ġ= Ġlinked Set Of < Class Descriptor >() ĊĊĠĠĠ Ġfun Ġcollect Sub classes ( scope : ĠMember Scope , Ġcollect Nested : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( descriptor Ġin Ġscope . get Cont ributed Descriptors ( Descriptor Kind Filter . CLAS SI FI ERS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor Ġ! is ĠClass Descriptor ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . is Direct Subclass ( descriptor , Ġsealed Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( collect Nested ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollect Sub classes ( descriptor . un subst it uted Inner Classes Scope , Ġcollect Nested ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontainer Ġ= Ġsealed Class . containing Declaration ĊĠĠĠ Ġif Ġ( container Ġis ĠPackage Fragment Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcollect Sub classes ( container . get Member Scope (), Ġcollect Nested Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcollect Sub classes ( sealed Class . un subst it uted Inner Classes Scope , Ġcollect Nested Ġ= Ġtrue ) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun ĠDeclaration Descriptor . is Published Api (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġdescriptor Ġ= Ġif Ġ( this Ġis ĠCallable Member Descriptor ) ĠDescriptor Utils . get Direct Member ( this ) Ġelse Ġthis ĊĠĠĠ Ġreturn Ġdescriptor . annotations . has Annotation ( Kotlin Built Ins . FQ _ NAMES . published Api ) Ċ } Ċ Ċ fun ĠDeclaration Descriptor . is Ancestor Of ( descriptor : ĠDeclaration Descriptor , Ġstrict : ĠBoolean ): ĠBoolean ĊĠĠĠĠĠĠĠ Ġ= ĠDescriptor Utils . is Ancestor ( this , Ġdescriptor , Ġstrict ) Ċ Ċ fun ĠDeclaration Descriptor . is Companion Object (): ĠBoolean Ġ= ĠDescriptor Utils . is Companion Object ( this ) Ċ Ċ fun ĠClass Descriptor . is Subclass Of ( super class : ĠClass Descriptor ): ĠBoolean Ġ= ĠDescriptor Utils . is Subclass ( this , Ġsuperclass ) Ċ Ċ val ĠAnnotation Descriptor . annotation Class : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġtype . constructor . declaration Descriptor Ġas ? ĠClass Descriptor Ċ Ċ fun ĠAnnotation Descriptor . first Argument (): ĠConstant Value < *> ? Ġ= Ġall Value Arguments . values . first OrNull () Ċ Ċ fun ĠMember Descriptor . is Effect ively External (): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( is External ) Ġreturn Ġtrue ĊĊĠĠĠ Ġif Ġ( this Ġis ĠProperty Accessor Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariable Descriptor Ġ= Ġcorresponding Property ĊĠĠĠĠĠĠĠ Ġif Ġ( variable Descriptor . is Effect ively External ()) Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( this Ġis ĠProperty Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getter ?. is External Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(! is Var Ġ|| Ġsetter ?. is External Ġ== Ġtrue )) Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontaining Class Ġ= Ġget Containing Class ( this ) ĊĠĠĠ Ġreturn Ġcontaining Class Ġ!= Ġnull Ġ&& Ġcontaining Class . is Effect ively External () Ċ } Ċ Ċ fun Ġis Parameter Of Annotation ( parameter Descriptor : ĠParameter Descriptor ): ĠBoolean Ġ= ĊĠĠĠ Ġparameter Descriptor . containing Declaration . is Annotation Constructor () Ċ Ċ fun ĠDeclaration Descriptor . is Annotation Constructor (): ĠBoolean Ġ= ĊĠĠĠ Ġthis Ġis ĠConstructor Descriptor Ġ&& ĠDescriptor Utils . is Annotation Class ( this . construct ed Class ) Ċ