/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 Ġ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 . Kotlin Retention Ċ 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 . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . constants . EnumValue Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . utils . DFS Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . check Ċ Ċ 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 Ġ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 Descriptor . class Id : ĠClass Id ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= Ġcontaining Declaration ĊĠĠĠĠĠĠĠ Ġif Ġ( owner Ġis ĠPackage Fragment Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClass Id ( owner . fq Name , Ġname ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( owner Ġis ĠClass Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġowner . class Id . create Nested Class Id ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Illegal Ġcontainer : Ġ$ owner ") ĊĠĠĠ Ġ} Ċ Ċ val ĠClass Descriptor . has Companion Object : ĠBoolean Ġget () Ġ= Ġcompanion Object Descriptor Ġ!= Ġnull Ċ Ċ val ĠClass Descriptor . hasClass Value Descriptor : ĠBoolean Ġget () Ġ= Ġclass Value Descriptor Ġ!= Ġnull Ċ Ċ val ĠClass Descriptor . class Value Descriptor : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġif Ġ( kind . is Singleton ) Ġthis Ġelse Ġcompanion Object Descriptor Ċ Ċ val ĠClass Descriptor . class ValueType Descriptor : ĠClass Descriptor ? ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( kind ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOBJECT Ġ-> Ġthis ĊĠĠĠĠĠĠĠ Ġ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 Ġ-> Ġcompanion 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 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent : ĠDeclaration Descriptor With Visibility ? Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parent . visibility . is Public API ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= ĠDescriptor Utils . getParent OfType ( parent , ĠDeclaration Descriptor With Visibility :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ val ĠDeclaration Descriptor With Visibility . is Effect ively Private Api : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent : ĠDeclaration Descriptor With Visibility ? Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Vis ibilities . is Private ( parent . visibility )) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= ĠDescriptor Utils . getParent OfType ( parent , ĠDeclaration Descriptor With Visibility :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊ Ċ val ĠDeclaration Descriptor . is Inside Private Class : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġ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 Ċ Ċ val ĠClass Descriptor . secondary Construct ors : ĠList < 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 Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġ` true ` Ġiff Ġthe Ġparameter Ġhas Ġa Ġdefault Ġvalue , Ġi . e . Ġdecl ares Ġit Ġor Ġinherits Ġby Ġoverriding Ġa Ġparameter Ġwhich Ġhas Ġa Ġdefault Ġvalue . Ċ Ġ*/ Ċ fun ĠValue Parameter Descriptor . has DefaultValue (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġhandler Ġ= Ġobject Ġ: ĠDFS . Abstract Node Handler < Value Parameter Descriptor , ĠBoolean >() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Children ( current : ĠValue Parameter Descriptor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġ|| Ġcurrent . decl ares DefaultValue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! result ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresult () Ġ= Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠDFS . dfs ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDFS . Neighbors < Value Parameter Descriptor > Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . over ridden Descriptors . map ( Value Parameter Descriptor :: get Original ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn Ġhandler . result () Ċ } Ċ Ċ 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 Ġannotation Entry Descriptor Ġ= Ġannotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . retention ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġretention Argument Value Ġ= Ġannotation Entry Descriptor . all Value Arguments . entries . first OrNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . key . name . asString () Ġ== Ġ" value " ĊĠĠĠ Ġ} ?. value Ġas ? ĠEnum Value Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠKotlin Retention . valueOf ( retention Argument Value . value . name . asString ()) Ċ } Ċ Ċ 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 . check Ġ{ Ġ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 ĠCallable Descriptor . over ridden Tree Unique As Sequence ( use Original : ĠBoolean ): ĠSequence < Callable Descriptor > Ġ{ ĊĠĠĠ Ġval Ġset Ġ= Ġhash Set Of < Callable Descriptor >() ĊĊĠĠĠ Ġfun ĠCallable Descriptor . do Build Over ridden Tree As Sequence (): ĠSequence < Callable Descriptor > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( if Ġ( use Original ) Ġoriginal Ġelse Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Ġin Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Ġ+= Ġoriginal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( this ) Ġ+ Ġoverridden Descriptors . as Sequence (). flatMap Ġ{ Ġit . do Build Over ridden Tree As Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġdo Build Over ridden Tree As Sequence () Ċ } Ċ