/* Ċ Ġ* Ġ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 Ċ Ċ import Ġcom . google . common . collect . Hash Multimap Ċ import Ġcom . google . common . collect . Multimap Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . config . Language Version Settings Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors .* Ċ import Ġorg . jetbrains . kotlin . incremental . Kotlin Lookup Location Ċ import Ġorg . jetbrains . kotlin . incremental . components . No Lookup Location Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . resolve . calls . smart casts . Data Flow Info Ċ import Ġorg . jetbrains . kotlin . resolve . check ers . Classifier Usage Checker Ċ import Ġorg . jetbrains . kotlin . resolve . lazy .* Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . descriptors . Lazy Class Descriptor Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . descriptors . Lazy Script Descriptor Ċ import Ġjava . util .* Ċ Ċ class ĠLazy Top Down Analyzer ( ĊĠĠĠ Ġprivate Ġval Ġtrace : ĠBinding Trace , ĊĠĠĠ Ġprivate Ġval Ġdeclaration Resolver : ĠDeclaration Resolver , ĊĠĠĠ Ġprivate Ġval Ġoverride Resolver : ĠOverride Resolver , ĊĠĠĠ Ġprivate Ġval Ġoverload Resolver : ĠOver load Resolver , ĊĠĠĠ Ġprivate Ġval Ġvariance Checker : ĠVari ance Checker , ĊĠĠĠ Ġprivate Ġval Ġmodule Descriptor : ĠModule Descriptor , ĊĠĠĠ Ġprivate Ġval Ġlazy Declaration Resolver : ĠLazy Declaration Resolver , ĊĠĠĠ Ġprivate Ġval Ġbody Resolver : ĠBody Resolver , ĊĠĠĠ Ġprivate Ġval Ġtop Level Descriptor Provider : ĠTop Level Descriptor Provider , ĊĠĠĠ Ġprivate Ġval Ġfile Scope Provider : ĠFile Scope Provider , ĊĠĠĠ Ġprivate Ġval Ġdeclaration Scope Provider : ĠDeclaration Scope Provider , ĊĠĠĠ Ġprivate Ġval Ġqualified Expression Resolver : ĠQual ified Expression Resolver , ĊĠĠĠ Ġprivate Ġval Ġidentifier Checker : ĠIdentifier Checker , ĊĠĠĠ Ġprivate Ġval Ġlanguage Version Settings : ĠLanguage Version Settings , ĊĠĠĠ Ġprivate Ġval Ġdeprecation Resolver : ĠDeprec ation Resolver , ĊĠĠĠ Ġprivate Ġval Ġclassifier Usage Check ers : ĠIterable < Classifier Usage Checker > Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġanalyze Declarations ( ĊĠĠĠĠĠĠĠ Ġtop Down Analysis Mode : ĠTop Down Analysis Mode , ĊĠĠĠĠĠĠĠ Ġdeclarations : ĠCollection < Psi Element >, ĊĠĠĠĠĠĠĠ Ġouter Data Flow Info : ĠData Flow Info Ġ= ĠData Flow Info . EMPTY ĊĠĠĠ Ġ): ĠTop Down Analysis Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠTop Down Analysis Context ( top Down Analysis Mode , Ġouter Data Flow Info , Ġdeclaration Scope Provider ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtop Level Fq Names Ġ= ĠHash Multimap . create < Fq Name , ĠK t Element >() ĊĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠArrayList < Kt Property >() ĊĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= ĠArrayList < Kt Named Function >() ĊĠĠĠĠĠĠĠ Ġval Ġtype Aliases Ġ= ĠArrayList < Kt Type Alias >() ĊĠĠĠĠĠĠĠ Ġval Ġdestruct uring Declarations Ġ= ĠArrayList < Kt Dest ruct uring Declaration >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġfill Ġin Ġthe Ġcontext ĊĠĠĠĠĠĠĠ Ġfor Ġ( declaration Ġin Ġdeclarations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġ' visitor ' Ġvariable Ġis Ġused Ġinside ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvisitor : ĠK t Visitor Void ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor Ġ= ĠException Wr apping Kt Visitor Void ( object Ġ: ĠK t Visitor Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Declarations ( declarations : ĠList < Kt Declaration >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( jet Declaration Ġin Ġdeclarations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjet Declaration . accept ( visitor !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Declaration ( dcl : ĠK t Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unsupported Ġdeclaration : Ġ" Ġ+ Ġd cl Ġ+ Ġ" Ġ" Ġ+ Ġd cl . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Script ( script : ĠK t Script ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . scripts . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Declaration Resolver . get Script Descriptor ( script , ĠKotlin Lookup Location ( script )) Ġas ĠLazy Script Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Declarations ( script . declarations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Kt File ( file : ĠK t File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Resolver . register File In Package ( trace , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Declarations ( file . declarations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Directive Ġ= Ġfile . package Directive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( file . is Script () Ġ|| Ġpackage Directive Ġ!= Ġnull ) Ġ{ Ġ" No Ġpackage Ġin Ġa Ġnon - script Ġfile : Ġ" Ġ+ Ġfile Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Directive ?. accept ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . add File ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Level Fq Names . put ( file . package Fq Name , Ġpackage Directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Package Directive ( directive : ĠK t Package Directive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective . package Names . forEach Ġ{ Ġidentifier Checker . check Identifier ( it . getIdentifier (), Ġtrace ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualified Expression Resolver . resolve Package Header ( directive , Ġmodule Descriptor , Ġtrace ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Import Directive ( import Directive : ĠK t Import Directive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimport Resolver Ġ= Ġfile Scope Provider . get Import Resolver ( import Directive . containing Kt File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Resolver . force Resolve Import ( import Directive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class Or Object ( class Or Object : ĠK t Class Or Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( class Or Object . is TopLevel ()) ĠKotlin Lookup Location ( class Or Object ) Ġelse ĠNo Lookup Location . WHEN _ RESOL VE _ DECL AR ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Declaration Resolver . getClass Descriptor ( class Or Object , Ġlocation ) Ġas ĠClass Descriptor With Resolution Scopes ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . declared Classes . put ( class Or Object , Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Declarations ( class Or Object . declarations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister TopLevel Fq Name ( top Level Fq Names , Ġclass Or Object , Ġdescriptor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Class Or Object Declarations ( class Or Object , Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Class Or Object Declarations ( class Or Object : ĠK t Class Or Object , Ġclass Descriptor : ĠClass Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcompanion Object Already Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( jet Declaration Ġin Ġclass Or Object . declarations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jet Declaration Ġis ĠK t Object Declaration Ġ&& Ġjet Declaration . is Companion ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp anion Object Already Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace . report ( MAN Y _ COMP AN ION _ OBJECTS . on ( jet Declaration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Object Already Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( jet Declaration Ġis ĠK t Secondary Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . is Singleton Or Anonymous Object ( class Descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace . report ( CON STRUCTOR _ IN _ OBJECT . on ( jet Declaration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( class Descriptor . kind Ġ== ĠClass Kind . INTERFACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrace . report ( CON STRUCTOR _ IN _ INTERFACE . on ( jet Declaration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class ( klass : ĠK t Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Class Or Object ( klass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Primary Constructor Parameters ( klass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġregister Primary Constructor Parameters ( klass : ĠK t Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( jet Parameter Ġin Ġklass . primary Constructor Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jet Parameter . has Val Or Var ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . primary Constructor Parameter Properties . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjet Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Declaration Resolver . resolve To Descriptor ( jet Parameter ) Ġas ĠProperty Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Secondary Constructor ( constructor : ĠK t Secondary Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . secondary Construct ors . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Declaration Resolver . resolve To Descriptor ( constructor ) Ġas ĠClass Constructor Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Enum Entry ( enum Entry : ĠK t Enum Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Class Or Object ( enum Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Object Declaration ( declaration : ĠK t Object Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Class Or Object ( declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Anonymous Initializer ( initializer : ĠK t Anonymous Initializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlazy Declaration Resolver . resolve To Descriptor ( initializer . containing Declaration ) Ġas ĠClass Descriptor With Resolution Scopes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . anonymous Initial izers . put ( initializer , Ġcontainer Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Dest ruct uring Declaration ( destruct uring Declaration : ĠK t Dest ruct uring Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( destruct uring Declaration . containing Kt File . is Script ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestruct uring Declarations . add ( destruct uring Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Named Function ( function : ĠK t Named Function ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions . add ( function ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property ( property : ĠK t Property ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . add ( property ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Alias ( type Alias : ĠK t Type Alias ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Aliases . add ( type Alias ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Function Descriptors ( c , Ġfunctions ) ĊĊĠĠĠĠĠĠĠ Ġcreate Property Descriptors ( c , Ġtop Level Fq Names , Ġproperties ) ĊĊĠĠĠĠĠĠĠ Ġcreate Properties From Dest ruct uring Declarations ( c , Ġtop Level Fq Names , Ġdestruct uring Declarations ) ĊĊĠĠĠĠĠĠĠ Ġcreate Type Alias Descriptors ( c , Ġtop Level Fq Names , Ġtype Aliases ) ĊĊĠĠĠĠĠĠĠ Ġresolve All Headers In Classes ( c ) ĊĊĠĠĠĠĠĠĠ Ġdeclaration Resolver . check Re declarations In Packages ( top Level Descriptor Provider , Ġtop Level Fq Names ) ĊĠĠĠĠĠĠĠ Ġdeclaration Resolver . check Re declarations ( c ) ĊĊĠĠĠĠĠĠĠ Ġoverride Resolver . check ( c ) ĊĊĠĠĠĠĠĠĠ Ġvariance Checker . check ( c ) ĊĊĠĠĠĠĠĠĠ Ġdeclaration Resolver . resolve Annotations On Files ( c , Ġfile Scope Provider ) ĊĊĠĠĠĠĠĠĠ Ġoverload Resolver . check Over loads ( c ) ĊĊĠĠĠĠĠĠĠ Ġbody Resolver . resolve B odies ( c ) ĊĊĠĠĠĠĠĠĠ Ġresolve Imports In All Files ( c ) ĊĊĠĠĠĠĠĠĠ ĠClass ifier Usage Checker . check ( declarations , Ġtrace , Ġlanguage Version Settings , Ġdeprecation Resolver , Ġclassifier Usage Check ers ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve All Headers In Classes ( c : ĠTop Down Analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( class Descriptor Ġin Ġc . all Classes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( class Descriptor Ġas ĠLazy Class Descriptor ). resolve Member Headers () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Imports In All Files ( c : ĠTop Down Analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġc . files Ġ+ Ġc . scripts . keys . map Ġ{ Ġit . containing Kt File Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Imports In File ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve Imports In File ( file : ĠK t File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Scope Provider . get Import Resolver ( file ). force Resolve All Imports () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Type Alias Descriptors ( ĊĠĠĠĠĠĠĠ Ġc : ĠTop Down Analysis Context , ĊĠĠĠĠĠĠĠ Ġtop Level Fq Names : ĠMult imap < Fq Name , ĠK t Element >, ĊĠĠĠĠĠĠĠ Ġtype Aliases : ĠList < Kt Type Alias > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Alias Ġin Ġtype Aliases ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġlazy Declaration Resolver . resolve To Descriptor ( type Alias ) Ġas ĠType Alias Descriptor ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . type Aliases [ type Alias ] Ġ= Ġdescriptor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister TopLevel Fq Name ( top Level Fq Names , Ġtype Alias , Ġdescriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Property Descriptors ( ĊĠĠĠĠĠĠĠ Ġc : ĠTop Down Analysis Context , ĊĠĠĠĠĠĠĠ Ġtop Level Fq Names : ĠMult imap < Fq Name , ĠK t Element >, ĊĠĠĠĠĠĠĠ Ġproperties : ĠList < Kt Property > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( property Ġin Ġproperties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġlazy Declaration Resolver . resolve To Descriptor ( property ) Ġas ĠProperty Descriptor ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . properties . put ( property , Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister TopLevel Fq Name ( top Level Fq Names , Ġproperty , Ġdescriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Function Descriptors ( c : ĠTop Down Analysis Context , Ġfunctions : ĠList < Kt Named Function >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( function Ġin Ġfunctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimple Function Descriptor Ġ= Ġlazy Declaration Resolver . resolve To Descriptor ( function ) Ġas ĠSimple Function Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . functions . put ( function , Ġsimple Function Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( simple Function Descriptor . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( parameter Descriptor Ġin Ġsimple Function Descriptor . value Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( parameter Descriptor . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Properties From Dest ruct uring Declarations ( ĊĠĠĠĠĠĠĠ Ġc : ĠTop Down Analysis Context , ĊĠĠĠĠĠĠĠ Ġtop Level Fq Names : ĠMult imap < Fq Name , ĠK t Element >, ĊĠĠĠĠĠĠĠ Ġdestruct uring Declarations : ĠList < Kt Dest ruct uring Declaration > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( destruct uring Declaration Ġin Ġdestruct uring Declarations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġdestruct uring Declaration . entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġlazy Declaration Resolver . resolve To Descriptor ( entry ) Ġas ĠProperty Descriptor ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . destruct uring Declaration Entries [ entry ] Ġ= Ġdescriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForce Resolve Util . force Resolve All Contents ( descriptor . annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister TopLevel Fq Name ( top Level Fq Names , Ġentry , Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister TopLevel Fq Name ( ĊĠĠĠĠĠĠĠ Ġtop Level Fq Names : ĠMult imap < Fq Name , ĠK t Element >, ĊĠĠĠĠĠĠĠ Ġdeclaration : ĠK t Named Declaration , ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Descriptor Utils . is TopLevel Declaration ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġdeclaration . fq Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fq Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Level Fq Names . put ( fq Name , Ġdeclaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ