/* Ċ Ġ* Ġ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 . repl Ċ Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . File Scope Factory Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . File Scopes Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . File Scopes Customizer Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . descriptors . Lazy Script Descriptor Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . file Scopes Customizer Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Import ing Scope Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . utils . parent sWith Self Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . utils . replace Import ing Scopes Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . first Is Instance Ċ Ċ class ĠRe pl State Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlines Ġ= Ġhash Map Of < Kt File , ĠLine Info >() ĊĠĠĠ Ġprivate Ġval Ġsuccessful Lines Ġ= Ġarray ListOf < Line Info . Successful Line >() ĊĊĠĠĠ Ġval Ġsuccessful Lines Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuccessful Lines . size ĊĊĠĠĠ Ġfun Ġsubmit Line ( kt File : ĠK t File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠLine Info . Submitted Line ( kt File , Ġsuccessful Lines . last OrNull ()) ĊĠĠĠĠĠĠĠ Ġlines [ kt File ] Ġ= Ġline ĊĠĠĠĠĠĠĠ Ġkt File . file Scopes Customizer Ġ= Ġobject Ġ: ĠFile Scopes Customizer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate File Scopes ( file Scope Factory : ĠFile Scope Factory ): ĠFile Scopes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġline Info ( kt File )?. let Ġ{ Ġcompute File Scopes ( it , Ġfile Scope Factory ) Ġ} Ġ?: Ġfile Scope Factory . create Scopes For File ( kt File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġline Success ( kt File : ĠK t File , Ġscript Descriptor : ĠLazy Script Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccessful Line Ġ= ĠLine Info . Successful Line ( kt File , Ġsuccessful Lines . last OrNull (), Ġscript Descriptor ) ĊĠĠĠĠĠĠĠ Ġlines [ kt File ] Ġ= Ġsuccessful Line ĊĠĠĠĠĠĠĠ Ġsuccessful Lines . add ( successful Line ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġline Failure ( kt File : ĠK t File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlines [ kt File ] Ġ= ĠLine Info . Failed Line ( kt File , Ġsuccessful Lines . last OrNull ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġline Info ( kt File : ĠK t File ) Ġ= Ġlines [ kt File ] ĊĊĠĠĠ Ġ// Ġuse Ġsealed ? ĊĠĠĠ Ġprivate Ġsealed Ġclass ĠLine Info Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġline Psi : ĠK t File ĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġparent Line : ĠSuccessful Line ? ĊĊĠĠĠĠĠĠĠ Ġclass ĠSub mitted Line ( override Ġval Ġline Psi : ĠK t File , Ġoverride Ġval Ġparent Line : ĠSuccessful Line ?) Ġ: ĠLine Info () ĊĠĠĠĠĠĠĠ Ġclass ĠSuccessful Line ( override Ġval Ġline Psi : ĠK t File , Ġoverride Ġval Ġparent Line : ĠSuccessful Line ?, Ġval Ġline Descriptor : ĠLazy Script Descriptor ) Ġ: ĠLine Info () ĊĠĠĠĠĠĠĠ Ġclass ĠFailed Line ( override Ġval Ġline Psi : ĠK t File , Ġoverride Ġval Ġparent Line : ĠSuccessful Line ?) Ġ: ĠLine Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompute File Scopes ( line Info : ĠLine Info , Ġfile Scope Factory : ĠFile Scope Factory ): ĠFile Scopes ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġscope Ġthat Ġwraps Ġprevious Ġline Ġlex ical Ġscope Ġand Ġadds Ġimports Ġfrom Ġthis Ġline ĊĠĠĠĠĠĠĠ Ġval Ġlex ical Scope After Last Line Ġ= Ġline Info . parent Line ?. line Descriptor ?. scope For Initializer Resolution Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġlast Line Imports Ġ= Ġlex ical Scope After Last Line . parent sWith Self . first Is Instance < Import ing Scope >() ĊĠĠĠĠĠĠĠ Ġval Ġscopes For This Line Ġ= Ġfile Scope Factory . create Scopes For File ( line Info . line Psi , Ġlast Line Imports ) ĊĠĠĠĠĠĠĠ Ġval Ġcombined Lex ical Scopes Ġ= Ġlex ical Scope After Last Line . replace Import ing Scopes ( scopes For This Line . import ing Scope ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Scopes ( combined Lex ical Scopes , Ġscopes For This Line . import ing Scope , Ġscopes For This Line . import Resolver ) ĊĠĠĠ Ġ} Ċ } Ċ