/* Ċ Ġ* Ġ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 . load . java . structure . impl Ċ Ċ import Ġcom . intellij . psi .* Ċ import Ġorg . jetbrains . kotlin . load . java . structure . Java Classifier Type Ċ import Ġorg . jetbrains . kotlin . load . java . structure . Java Type Ċ Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠJava Classifier Type Impl ( psi ClassType : ĠPsi ClassType ) Ġ: ĠJava Type Impl < Psi ClassType >( psi ClassType ), ĠJava Classifier Type Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġresolution Result : ĠResolution Result ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġclassifier : ĠJava Classifier Impl < *> ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġresolve (). classifier ĊĊĠĠĠ Ġval Ġsubstit utor : ĠPsi Subst it utor ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġresolve (). subst it utor ĊĊĠĠĠ Ġoverride Ġval Ġclassifier QualifiedName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpsi . canonical Text . convert Canonical Name To QName () ĊĊĠĠĠ Ġoverride Ġval Ġpresent able Text : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpsi . present able Text ĊĊĠĠĠ Ġoverride Ġval Ġis Raw : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġresolve (). is Raw ĊĊĠĠĠ Ġoverride // Ġparameters Ġincluding Ġones Ġfrom Ġouter Ġclass ĊĠĠĠ Ġval Ġtype Arguments : ĠList < Java Type ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclassifier Ġ= Ġclassifier Ġas ? ĠJava Class Impl Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠgetType Parameters ( classifier . psi ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubstit utor Ġ= Ġsubstit utor ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Java Type ? >( parameters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( type Parameter Ġin Ġparameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubstit uted Type Ġ= Ġsubstit utor . substitute ( type Parameter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( subst it uted Type ?. let Ġ{ ĠJava Type Impl . create ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠResolution Result ( ĊĠĠĠĠĠĠĠ Ġval Ġclassifier : ĠJava Classifier Impl < *> ?, ĊĠĠĠĠĠĠĠ Ġval Ġsubstit utor : ĠPsi Subst it utor , ĊĠĠĠĠĠĠĠ Ġval Ġis Raw : ĠBoolean ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġresolve (): ĠResolution Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresolution Result Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpsi . resolve Gener ics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Class Ġ= Ġresult . element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubstit utor Ġ= Ġresult . subst it utor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResolution Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class ?. let Ġ{ ĠJava Classifier Impl . create ( it ) Ġ}, Ġsubstit utor , ĠPsi ClassType . is Raw ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Result Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCopy - past ed Ġfrom ĠPsi Util . type Parameters Iterable ĊĠĠĠ Ġ// ĠThe Ġonly Ġchange Ġis Ġusing Ġ` Collections . addAll ( result , Ġtype Parameters )` Ġinstead Ġof Ġre ver sing Ġtype Ġparameters Ġof Ġ` current Owner ` ĊĠĠĠ Ġ// ĠResult Ġdiffers Ġin Ġcases Ġlike : ĊĠĠĠ Ġ// Ġclass ĠO uter < H 1 > Ġ{ ĊĠĠĠ Ġ// ĠĠ Ġclass ĠInner < H 2 , ĠH 3 > Ġ{} ĊĠĠĠ Ġ// Ġ} ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠPsi Util . type Parameters Iterable Ġreturns ĠH 3 , ĠH 2 , ĠH 1 ĊĠĠĠ Ġ// ĠBut Ġwe Ġwould Ġlike Ġto Ġhave ĠH 2 , ĠH 3 , ĠH 1 Ġas Ġsuch Ġorder Ġis Ġconsistent Ġwith Ġour Ġtype Ġrepresentation ĊĠĠĠ Ġprivate Ġfun ĠgetType Parameters ( owner : ĠPsi Class ): ĠList < Psi Type Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠList < Psi Type Parameter >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Owner : ĠPsi Type Parameter List Owner ? Ġ= Ġowner ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Owner Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Parameters Ġ= Ġcurrent Owner . type Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Parameters . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult ?. let Ġ{ Ġit Ġ+ Ġtype Parameters Ġ} Ġ?: Ġtype Parameters . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Owner . has Modifier Property ( Psi Modifier . STATIC )) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Owner Ġ= Ġcurrent Owner . containing Class ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġ?: Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ