/* Ċ Ġ* Ġ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 . resolve . scopes Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Classifier Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Property Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Simple Function Descriptor Ċ import Ġorg . jetbrains . kotlin . incremental . components . Lookup Location Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . util . collection Utils . getFirst Classifier Dis crimin ate Headers Ċ import Ġorg . jetbrains . kotlin . util . collection Utils . get From All Scopes Ċ import Ġorg . jetbrains . kotlin . utils . Printer Ċ Ċ class ĠCh ained Member Scope ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġdebug Name : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġscopes : ĠList < Member Scope > Ċ ) Ġ: ĠMember Scope Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Cont ributed Classifier ( name : ĠName , Ġlocation : ĠLookup Location ): ĠClass ifier Descriptor ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġget First Classifier Dis crimin ate Headers ( scopes ) Ġ{ Ġit . get Cont ributed Classifier ( name , Ġlocation ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Cont ributed Variables ( name : ĠName , Ġlocation : ĠLookup Location ): ĠCollection < Property Descriptor > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġget From All Scopes ( scopes ) Ġ{ Ġit . get Cont ributed Variables ( name , Ġlocation ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Cont ributed Functions ( name : ĠName , Ġlocation : ĠLookup Location ): ĠCollection < Simple Function Descriptor > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġget From All Scopes ( scopes ) Ġ{ Ġit . get Cont ributed Functions ( name , Ġlocation ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Cont ributed Descriptors ( kind Filter : ĠDescriptor Kind Filter , Ġname Filter : Ġ( Name ) Ġ-> ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġget From All Scopes ( scopes ) Ġ{ Ġit . get Cont ributed Descriptors ( kind Filter , Ġname Filter ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Function Names () Ġ= Ġscopes . flatMap To ( mutable Set Of ()) Ġ{ Ġit . get Function Names () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġget Variable Names () Ġ= Ġscopes . flatMap To ( mutable Set Of ()) Ġ{ Ġit . get Variable Names () Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġdebug Name ĊĊĠĠĠ Ġoverride Ġfun Ġprint Scope Structure ( p : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġp . println ( this :: class . java . simple Name , Ġ": Ġ", Ġdebug Name , Ġ" Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . push Indent () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( scope Ġin Ġscopes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope . print Scope Structure ( p ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġp . pop Indent () ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( debug Name : ĠString , Ġscopes : ĠList < Member Scope >): ĠMember Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( scopes . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠMember Scope . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġscopes . single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCh ained Member Scope ( debug Name , Ġscopes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ