/* Ċ Ġ* Ġ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 . idea . k doc Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotations Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Descriptor If Any Ċ import Ġorg . jetbrains . kotlin . idea . resolve . Resolution Facade Ċ import Ġorg . jetbrains . kotlin . idea . stub index .* Ċ import Ġorg . jetbrains . kotlin . incremental . components . Lookup Location Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . name . is Child Of Ċ import Ġorg . jetbrains . kotlin . name . is One Segment FQ N Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Descriptor Kind Filter Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ import Ġorg . jetbrains . kotlin . utils . Printer Ċ Ċ class ĠIde Sample Resolution Service ( val Ġproject : ĠProject ) Ġ: ĠSample Resolution Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Sample ( context : ĠBinding Context , Ġfrom Descriptor : ĠDeclaration Descriptor , Ġresolution Facade : ĠResolution Facade , Ġqualified Name : ĠList < String >): ĠCollection < Declaration Descriptor > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠKotlin Source Filter Scope . project And Libraries Sources ( Global Search Scope . project Scope ( project ), Ġproject ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshort Name Ġ= Ġqualified Name . last OrNull () Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Fq Name Ġ= ĠF q Name . from Segments ( qualified Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= ĠKotlin Function ShortName Index . getInstance (). get ( short Name , Ġproject , Ġscope ). as Sequence () ĊĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= ĠKotlin Class ShortName Index . getInstance (). get ( short Name , Ġproject , Ġscope ). as Sequence () ĊĊĠĠĠĠĠĠĠ Ġval Ġdescriptors Ġ= Ġ( functions Ġ+ Ġclasses ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . fq Name Ġ== Ġtarget Fq Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . resolve To Descriptor ( Body Resolve Mode . PAR TIAL ) Ġ} Ġ// ĠTODO ĠFilter Ġout Ġnot Ġvisible Ġdue Ġdependencies Ġconfig Ġdescriptors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġif Ġ( descriptors . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdescriptors ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! target Fq Name . is Root Ġ&& ĠPackage Index Util . package Exists ( target Fq Name , Ġscope , Ġproject )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( Global Synt hetic Package View Descriptor ( target Fq Name , Ġproject , Ġscope )) ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġshould Not Be Called (): ĠNothing Ġ= Ġthrow ĠUnsupportedOperationException (" Synt hetic ĠP VD Ġfor ĠK Doc Ġlink Ġresolution ") Ċ Ċ private Ġclass ĠGlobal Synt hetic Package View Descriptor ( override Ġval Ġfq Name : ĠF q Name , Ġprivate Ġval Ġproject : ĠProject , Ġprivate Ġval Ġscope : ĠGlobal Search Scope ) Ġ: ĠPackage View Descriptor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Containing Declaration (): ĠPackage View Descriptor ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fq Name . is One Segment FQ N ()) Ġnull Ġelse ĠGlobal Synt hetic Package View Descriptor ( fq Name . parent (), Ġproject , Ġscope ) ĊĊĊĠĠĠ Ġoverride Ġval Ġmember Scope : ĠMember Scope Ġ= Ġobject Ġ: ĠMember Scope Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cont ributed Variables ( name : ĠName , Ġlocation : ĠLookup Location ): ĠCollection < Property Descriptor > Ġ= Ġshould Not Be Called () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cont ributed Functions ( name : ĠName , Ġlocation : ĠLookup Location ): ĠCollection < Simple Function Descriptor > Ġ= Ġshould Not Be Called () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Function Names (): ĠSet < Name > Ġ= Ġshould Not Be Called () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Variable Names (): ĠSet < Name > Ġ= Ġshould Not Be Called () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cont ributed Classifier ( name : ĠName , Ġlocation : ĠLookup Location ): ĠClass ifier Descriptor ? Ġ= Ġshould Not Be Called () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint Scope Structure ( p : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . print Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . print (" Global Synt hetic Package View Descriptor Member Scope Ġ( INDEX )") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġget Classes ByName Filter ( name Filter : Ġ( Name ) Ġ-> ĠBoolean ) Ġ= ĠKotlin Full ClassName Index . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll Keys ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . startsWith ( fq Name . asString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: Fq Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Child Of ( fq Name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġname Filter ( it . short Name ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠKotlin Full ClassName Index . getInstance ()[ it . asString (), Ġproject , Ġscope ]. as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . resolve To Descriptor If Any () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Functions ByName Filter ( name Filter : Ġ( Name ) Ġ-> ĠBoolean ) Ġ= ĠKotlin TopLevel Function F qn Name Index . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll Keys ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . startsWith ( fq Name . asString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: Fq Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Child Of ( fq Name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġname Filter ( it . short Name ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠKotlin TopLevel Function F qn Name Index . getInstance ()[ it . asString (), Ġproject , Ġscope ]. as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . resolve To Descriptor If Any () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sub packages ( name Filter : Ġ( Name ) Ġ-> ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Index Util . getSub Package Fq Names ( fq Name , Ġscope , Ġproject , Ġname Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠGlobal Synt hetic Package View Descriptor ( it , Ġproject , Ġscope ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Cont ributed Descriptors ( kind Filter : ĠDescriptor Kind Filter , Ġname Filter : Ġ( Name ) Ġ-> ĠBoolean ): ĠCollection < Declaration Descriptor > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġ( get Classes ByName Filter ( name Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġget Functions ByName Filter ( name Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġget Sub packages ( name Filter )). filter NotNull (). toList () ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġmodule : ĠModule Descriptor ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġshould Not Be Called () ĊĠĠĠ Ġoverride Ġval Ġfragments : ĠList < Package Fragment Descriptor > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġshould Not Be Called () ĊĊĠĠĠ Ġoverride Ġfun Ġget Original () Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠName Ġ= Ġfq Name . short Name () ĊĊĠĠĠ Ġoverride Ġfun Ġ< R Ġ: ĠAny ?, ĠD Ġ: ĠAny ?> Ġaccept ( visitor : ĠDeclaration Descriptor Visitor < R , ĠD > ?, Ġdata : ĠD ): ĠR Ġ= Ġshould Not Be Called () ĊĊĠĠĠ Ġoverride Ġfun Ġaccept Void ( visitor : ĠDeclaration Descriptor Visitor < Void , ĠVoid > ?) Ġ= Ġshould Not Be Called () ĊĊĠĠĠ Ġoverride Ġval Ġannotations Ġ= ĠAn notations . EMPTY Ċ }