/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . jvm . extensions Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . kotlin . analyzer . Analysis Result Ċ import Ġorg . jetbrains . kotlin . container . Component Provider Ċ import Ġorg . jetbrains . kotlin . container . get Ċ import Ġorg . jetbrains . kotlin . context . Project Context Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . resolve .* Ċ import Ġorg . jetbrains . kotlin . resolve . calls . smart casts . Data Flow Info Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . is Annotation Constructor Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Declaration Scope Provider Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Force Resolve Util Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Resolve Session Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Lex ical Scope Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . utils . member Scope As Import ing Scope Ċ Ċ open Ġclass ĠPartial Analysis Handler Extension Ġ: ĠAnalysis Handler Extension Ġ{ ĊĠĠĠ Ġopen Ġval Ġanalyze Part ially : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġopen Ġval Ġanalyze Default Parameter Values : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġdo Analysis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule : ĠModule Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Context : ĠProject Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles : ĠCollection < Kt File >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Trace : ĠBinding Trace , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Provider : ĠComponent Provider ĊĠĠĠ Ġ): ĠAnalysis Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! analyze Part ially ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresolve Session Ġ= Ġcomponent Provider . get < Resolve Session >() ĊĠĠĠĠĠĠĠ Ġval Ġbody Resolver Ġ= Ġcomponent Provider . get < Body Resolver >() ĊĠĠĠĠĠĠĠ Ġval Ġdeclaration Scope Provider Ġ= Ġcomponent Provider . get < Declaration Scope Provider >() ĊĠĠĠĠĠĠĠ Ġval Ġtop Down Analyzer Ġ= Ġcomponent Provider . get < Lazy Top Down Analyzer >() ĊĊĠĠĠĠĠĠĠ Ġval Ġtop Down Analysis Context Ġ= ĠTop Down Analysis Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTop Down Analysis Mode . TopLevel Declarations , ĠData Flow Info . EMPTY , Ġdeclaration Scope Provider ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( resolve Session . getFile Annotations ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Down Analyzer . resolve Imports In File ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo ForEach Declaration ( files ) Ġ{ Ġdeclaration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġresolve Session . resolve To Descriptor ( declaration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor . type Constructor . sup ert ypes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġis ĠK t Class Or Object Ġ&& Ġdescriptor Ġis ĠClass Descriptor With Resolution Scopes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Resolver . resolve Super Type Entry List ( Data Flow Info . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . un subst it uted Primary Constructor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . scope For Constructor Header Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . scope For Member Declaration Resolution ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProperty Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġis ĠK t Property ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠTODO ĠNow Ġwe Ġanaly se Ġbody Ġwith Ġanonymous Ġobject Ġinitial izers . ĠCheck Ġif Ġwe Ġcan 't Ġavoid Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġval Ġa : ĠRunnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ Ġ... Ġ} Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// resolve Ġproperty Ġin Ġcase Ġit Ġhas Ġdelegate Ġexpression Ġor Ġexplicit Ġaccessor , Ġotherwise Ġjust Ġinfer Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration . delegate Expression Ġ!= Ġnull Ġ|| Ġdeclaration . access ors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Resolver . resolve Property ( top Down Analysis Context , Ġdeclaration , Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBody Resolver . compute Deferred Type ( descriptor . returnType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFunction Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġis ĠK t Primary Constructor Ġ&& Ġ( analyze Default Parameter Values Ġ|| Ġdescriptor . is Annotation Constructor ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontaining Scope Ġ= Ġdescriptor . containing Scope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( containing Scope Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Resolver . resolve Constructor Parameter Default Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Down Analysis Context . outer Data Flow Info , Ġbinding Trace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration , Ġdescriptor Ġas ĠConstructor Descriptor , Ġcontaining Scope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( declaration Ġis ĠK t Function Ġ&& Ġ! declaration . has Declared ReturnType () Ġ&& Ġ! declaration . has Block Body ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAnalysis Result . Companion . success ( binding Trace . binding Context , Ġmodule , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠDeclaration Descriptor . containing Scope : ĠLex ical Scope ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontaining Descriptor Ġ= Ġcontaining Declaration Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( containing Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Descriptor With Resolution Scopes Ġ-> Ġcontaining Descriptor . scope For Initializer Resolution ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPackage Fragment Descriptor Ġ-> ĠLex ical Scope . Base ( containing Descriptor . get Member Scope (). member Scope As Import ing Scope (), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo ForEach Declaration ( declaration : ĠK t Declaration , Ġf : Ġ( Kt Declaration ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġ! is ĠK t Anonymous Initializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ( declaration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġis ĠK t Class Or Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprimary Constructor Ġ= Ġdeclaration . primary Constructor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( primary Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ( primary Constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . declarations . forEach Ġ{ Ġdo ForEach Declaration ( it , Ġf ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo ForEach Declaration ( files : ĠCollection < Kt File >, Ġf : Ġ( Kt Declaration ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . declarations . forEach Ġ{ Ġdo ForEach Declaration ( it , Ġf ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ