/* Ċ Ġ* Ġ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 . stub index Ċ Ċ import Ġcom . intellij . psi . stubs . Index Sink Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . stubs . Kotlin Callable Stub Base Ċ import Ġorg . jetbrains . kotlin . util . alias Import Map Ċ Ċ fun Ġindex TopLevel Extension < T Declaration Ġ: ĠK t Callable Declaration >( stub : ĠKotlin Callable Stub Base < T Declaration >, Ġsink : ĠIndex Sink ) Ġ{ ĊĠĠĠ Ġif Ġ( stub . is Extension ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeclaration Ġ= Ġstub . get Psi () ĊĠĠĠĠĠĠĠ Ġdeclaration . get Receiver Type Reference () !!. type Element ?. index ( declaration , Ġsink ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠK t Type Element . index < T Declaration Ġ: ĠK t Callable Declaration >( declaration : ĠT Declaration , Ġsink : ĠIndex Sink ) Ġ{ ĊĠĠĠ Ġfun Ġoccurrence ( typeName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġdeclaration . getName () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġsink . occ urrence ( Jet TopLevel Extensions By Receiver Type Index . INSTANCE . getKey (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJet TopLevel Extensions By Receiver Type Index . build Key ( typeName , Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠK t User Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreference Name Ġ= Ġget Referenced Name () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Parameter Ġ= Ġdeclaration . getType Parameters (). first OrNull Ġ{ Ġit . getName () Ġ== Ġreference Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Parameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbound Ġ= Ġtype Parameter . get Ext ends Bound () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bound Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbound . type Element ?. index ( declaration , Ġsink ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence (" Any ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence ( reference Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġalias Import Map ()[ reference Name ]. forEach Ġ{ Ġoccurrence ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠK t Nullable Type Ġ-> Ġget Inner Type ()?. index ( declaration , Ġsink ) ĊĊĠĠĠĠĠĠĠ Ġis ĠK t FunctionType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġar ity Ġ= Ġget Parameters (). size () Ġ+ Ġ( if Ġ( get Receiver Type Reference () Ġ!= Ġnull ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence (" Function $ arity ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠK t Dynamic Type Ġ-> Ġoccurrence (" Any ") ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġtype : Ġ$ this ") ĊĠĠĠ Ġ} Ċ } Ċ