/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 Ġ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 . resolve . impl Ċ Ċ import Ġorg . jetbrains . kotlin . fir . F ir Element Ċ import Ġorg . jetbrains . kotlin . fir . F ir Session Ċ import Ġorg . jetbrains . kotlin . fir . declarations .* Ċ import Ġorg . jetbrains . kotlin . fir . resolve . F ir Provider Ċ import Ġorg . jetbrains . kotlin . fir . scopes . impl . F ir Class Declared Member Scope Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Callable Id Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Callable Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . Con e Class Like Symbol Ċ import Ġorg . jetbrains . kotlin . fir . symbols . F ir Symbol Owner Ċ import Ġorg . jetbrains . kotlin . fir . visitor s . F ir Visitor Void Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ Ċ class ĠF ir Provider Impl ( val Ġsession : ĠF ir Session ) Ġ: ĠF ir Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget F ir Callable Container File ( callable Id : ĠCallable Id ): ĠF ir File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcallable Container Map [ callable Id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetClass Like Symbol By Fq Name ( class Id : ĠClass Id ): ĠC one Class Like Symbol ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( getF ir Classifier By Fq Name ( class Id ) Ġas ? ĠF ir Symbol Owner <* >) ?. symbol Ġas ? ĠC one Class Like Symbol ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget TopLevel Callable Symbols ( package Fq Name : ĠF q Name , Ġname : ĠName ): ĠList < Con e Callable Symbol > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( callable Map [ Callable Id ( package Fq Name , Ġnull , Ġname )] Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < F ir Symbol Owner <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . symbol Ġas ? ĠC one Callable Symbol Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetClass Declared Member Scope ( class Id : ĠClass Id ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( getF ir Classifier By Fq Name ( class Id ) Ġas ? ĠF ir Regular Class )?. let (:: F ir Class Declared Member Scope ) ĊĊĠĠĠ Ġoverride Ġfun Ġget F ir Classifier Container File ( fq Name : ĠClass Id ): ĠF ir File Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclassifier Container File Map [ fq Name ] Ġ?: Ġerror (" Couldn 't Ġfind Ġcontainer Ġfor Ġ$ fq Name ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord File ( file : ĠF ir File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġfile . package Fq Name ĊĠĠĠĠĠĠĠ Ġfile Map . merge ( packageName , ĠlistOf ( file )) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ} ĊĊĠĠĠĠĠĠĠ Ġfile . accept Children ( object Ġ: ĠF ir Visitor Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠF ir Element ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontainer Fq Name : ĠF q Name Ġ= ĠF q Name . ROOT ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Regular Class ( regular Class : ĠF ir Regular Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġcontainer Fq Name . child ( regular Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Id Ġ= ĠClass Id ( packageName , Ġfq Name , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Map [ class Id ] Ġ= Ġregular Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Container File Map [ class Id ] Ġ= Ġfile ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Fq Name Ġ= Ġfq Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregular Class . accept Children ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Fq Name Ġ= Ġfq Name . parent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Alias ( type Alias : ĠF ir Type Alias ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġcontainer Fq Name . child ( type Alias . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Id Ġ= ĠClass Id ( packageName , Ġfq Name , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Map [ class Id ] Ġ= Ġtype Alias ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Container File Map [ class Id ] Ġ= Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Callable Member Declaration ( callable Member Declaration : ĠF ir Callable Member Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallable Id Ġ= Ġ( callable Member Declaration . symbol Ġas ĠC one Callable Symbol ). callable Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Map . merge ( callable Id , ĠlistOf ( callable Member Declaration )) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Container Map [ callable Id ] Ġ= Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Constructor ( constructor : ĠF ir Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Callable Member Declaration ( constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Named Function ( named Function : ĠF ir Named Function ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Callable Member Declaration ( named Function ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property ( property : ĠF ir Property ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Callable Member Declaration ( property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfile Map Ġ= Ġmutable Map Of < Fq Name , ĠList < F ir File >>() ĊĠĠĠ Ġprivate Ġval Ġclassifier Map Ġ= Ġmutable Map Of < Class Id , ĠF ir Class Like Declaration >() ĊĠĠĠ Ġprivate Ġval Ġclassifier Container File Map Ġ= Ġmutable Map Of < Class Id , ĠF ir File >() ĊĠĠĠ Ġprivate Ġval Ġcallable Map Ġ= Ġmutable Map Of < Callable Id , ĠList < F ir Named Declaration >>() ĊĠĠĠ Ġprivate Ġval Ġcallable Container Map Ġ= Ġmutable Map Of < Callable Id , ĠF ir File >() ĊĊĠĠĠ Ġoverride Ġfun Ġget F ir Files By Package ( fq Name : ĠF q Name ): ĠList < F ir File > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile Map [ fq Name ]. or Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget F ir Classifier By Fq Name ( fq Name : ĠClass Id ): ĠF ir Class Like Declaration ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclassifier Map [ fq Name ] ĊĠĠĠ Ġ} Ċ Ċ } Ċ