/* Ċ Ġ* Ġ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 . idea . code Insight Ċ Ċ import Ġorg . jetbrains . kotlin . psi . Jet Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . Jet Element Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . psi . Jet Tree Visitor Void Ċ import Ġorg . jetbrains . kotlin . psi . Jet User Type Ċ import Ġorg . jetbrains . kotlin . psi . Jet Expression Ċ import Ġorg . jetbrains . kotlin . psi . Jet Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Jet Simple Name Expression Ċ import Ġjava . util . Collections Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . get Resolution Facade Ċ import Ġorg . jetbrains . kotlin . psi . Jet Qualified Expression Ċ import Ġjava . util . Linked HashMap Ċ Ċ object ĠJet File References Resolver Ġ{ ĊĠĠĠ Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement : ĠJet Element , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Qual ifiers : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Short Names : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠMap < Jet Reference Expression , ĠBinding Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( element . get Containing File () Ġas ? ĠJet File )?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve ( file , ĠlistOf ( element ), Ġresolve Qual ifiers , Ġresolve Short Names ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠCollections . empty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile : ĠJet File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements : ĠIterable < Jet Element >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Qual ifiers : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Short Names : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠMap < Jet Reference Expression , ĠBinding Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= ĠResolve All References Visitor ( file , Ġresolve Qual ifiers , Ġresolve Short Names ) ĊĠĠĠĠĠĠĠ Ġif Ġ( elements Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . forEach Ġ{ Ġit . accept ( visitor ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvisitor . result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠResolve All References Visitor ( file : ĠJet File , Ġval Ġresolve Qual ifiers : ĠBoolean , Ġval Ġresolve Short Names : ĠBoolean ) Ġ: ĠJet Tree Visitor Void () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġresolution Facade Ġ= Ġfile . get Resolution Facade () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġresolve Map Ġ= ĠLinkedHashMap < Jet Reference Expression , ĠBinding Context >() ĊĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġresult : ĠMap < Jet Reference Expression , ĠBinding Context > Ġ= Ġresolve Map ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit User Type ( user Type : ĠJet User Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Qual ifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Type . accept Children ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Short Names Ġ|| Ġuser Type . get Qualifier () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Expression Ġ= Ġuser Type . getReference Expression () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Map [ reference Expression ] Ġ= Ġresolution Facade . analyze ( reference Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Qualified Expression ( expression : ĠJet Qualified Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Expression Ġ= Ġexpression . get Receiver Expression () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Qual ifiers Ġ|| Ġresolution Facade . analyze ( expression )[ Binding Context . QUAL IFIER , Ġreceiver Expression ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Expression . accept ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Expression Ġ= Ġexpression . get Selector Expression ()?. reference Expression () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Map [ reference Expression ] Ġ= Ġresolution Facade . analyze ( reference Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression . get Selector Expression ()?. accept ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Simple Name Expression ( expression : ĠJet Simple Name Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolve Short Names ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Map [ expression ] Ġ= Ġresolution Facade . analyze ( expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠJet Expression . reference Expression (): ĠJet Reference Expression ? Ġ= ĊĠĠĠĠĠĠĠ Ġ( if Ġ( this Ġis ĠJet Call Expression ) Ġget Cal lee Expression () Ġelse Ġthis ) Ġas ? ĠJet Reference Expression Ċ