/* Ċ Ġ* ĠCopyright Ġ 2 0 0 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 Ġcom . intellij . compiler . chains Search Ċ Ċ import Ġcom . intellij . compiler . backward Refs . Compiler Reference Service Ex Ċ import Ġcom . intellij . compiler . chains Search . context . Chain Search Target Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġcom . intellij . psi . util . Psi Util Ċ import Ġorg . jetbrains . j ps . backward Refs . Light Ref Ċ import Ġorg . jetbrains . j ps . backward Refs . Signature Data Ċ import Ġjava . util . function . Predicate Ċ Ċ class ĠMethod Incomplete Signature ( val Ġref : ĠLight Ref . Java Light Method Ref , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsignature Data : ĠSignature Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġref Service : ĠCompiler Reference Service Ex ) Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval ĠCON STRUCTOR _ METHOD _ NAME Ġ= Ġ"< init >" ĊĠ Ġ} ĊĊĠ Ġval Ġname : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠ Ġref Service . getName ( ref . name ) ĊĠ Ġ} ĊĊĠ Ġval Ġowner Ref Ġ= Ġref . owner ĊĊĠ Ġval Ġowner : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠ Ġref Service . getName ( ref . owner . name ) ĊĠ Ġ} ĊĊĠ Ġval Ġraw ReturnType : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠ Ġref Service . getName ( signature Data . raw ReturnType ) ĊĠ Ġ} ĊĊĠ Ġval Ġparameter Count : ĠInt ĊĠĠĠ Ġget () Ġ= Ġref . parameter Count ĊĊĠ Ġval Ġis Static : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġsignature Data . is Static ĊĊĠ Ġfun Ġresolve Qualifier ( project : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Scope : ĠGlobal Search Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Validator : ĠPredicate < Psi Member >): ĠPsi Class ? Ġ{ ĊĠĠĠ Ġval Ġclazz Ġ= ĠJava Psi Facade . getInstance ( project ). find Class ( owner , Ġresolve Scope ) ĊĠĠĠ Ġreturn Ġif Ġ( clazz Ġ!= Ġnull Ġ&& Ġaccess Validator . test ( clazz )) Ġclazz Ġelse Ġnull ĊĠ Ġ} ĊĊĠ Ġfun Ġresolve ( project : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Scope : ĠGlobal Search Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccess Validator : ĠPredicate < Psi Member >): ĠArray < Psi Method > Ġ{ ĊĠĠĠ Ġif Ġ( CON STRUCTOR _ METHOD _ NAME Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠPsi Method . EMPTY _ ARRAY ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġa Class Ġ= Ġresolve Qualifier ( project , Ġresolve Scope , Ġaccess Validator ) Ġ?: Ġreturn ĠPsi Method . EMPTY _ ARRAY ĊĠĠĠ Ġreturn Ġa Class . find Methods ByName ( name , Ġtrue ) ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . has Modifier Property ( Psi Modifier . STATIC ) Ġ== Ġis Static Ġ} ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Deprecated Ġ} ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġaccess Validator . test ( it ) Ġ} ĊĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġit . returnType ĊĠĠĠĠĠĠĠ Ġwhen Ġ( signature Data . iterator Kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSignature Data . ARRAY _ ONE _ DIM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( returnType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi ArrayType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Type Ġ= ĠreturnType . component Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Type Ġis ĠPsi ClassType Ġ&& Ġcomponent Type . resolve ()?. qualified Name Ġ== Ġraw ReturnType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠSignature Data . ITERATOR _ ONE _ DIM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Kind Ġ= ĠChain Search Target . get Iterator Kind ( Psi Util . resolve Class In ClassType Only ( returnType )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator Kind Ġ!= Ġnull Ġ-> ĠPsi Util . resolve Class In ClassType Only ( Psi Util . substitute Type Parameter ( returnType , Ġiterator Kind , Ġ 0 , Ġfalse )) ?. qualified Name Ġ== Ġraw ReturnType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠSignature Data . ZERO _ DIM Ġ-> ĠreturnType Ġis ĠPsi ClassType Ġ&& ĠreturnType . resolve ()?. qualified Name Ġ== Ġraw ReturnType ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" kind Ġis Ġunsupported Ġ${ signature Data . iterator Kind }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. sorted By ({ Ġit . parameter List . parameters Count Ġ}) ĊĠĠĠĠĠ Ġ. to Typed Array () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( other ?. java Class Ġ!= Ġjava Class ) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠMethod Incomplete Signature ĊĊĠĠĠ Ġif Ġ( ref . owner Ġ!= Ġother . ref . owner ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( ref . name Ġ!= Ġother . ref . name ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( signature Data Ġ!= Ġother . signature Data ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġref . owner . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġref . name . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġsignature Data . hashCode () ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġowner Ġ+ Ġ( if Ġ( is Static ) Ġ"" Ġelse Ġ"# ") Ġ+ Ġname Ġ+ Ġ"(" Ġ+ Ġparameter Count Ġ+ Ġ")" ĊĠ Ġ} Ċ }