/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ċ Ġ* Ġ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 . google . devtools . k sp . symbol . impl . java Ċ Ċ import Ġcom . google . devtools . k sp . Exception Message Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . source . Psi Class Reference Type Ċ import Ġcom . google . devtools . k sp . processing . impl . Resolver Impl Ċ import Ġcom . google . devtools . k sp . symbol .* Ċ import Ġcom . google . devtools . k sp . symbol . impl . KS Object Cache Ċ import Ġcom . google . devtools . k sp . symbol . impl . binary . KS Class Declaration Descriptor Impl Ċ import Ġcom . google . devtools . k sp . symbol . impl . binary . KS Classifier Reference Descriptor Impl Ċ import Ġcom . google . devtools . k sp . symbol . impl . kotlin . K SError Type Ċ import Ġcom . google . devtools . k sp . symbol . impl . kotlin . KS Type Impl Ċ import Ġcom . google . devtools . k sp . symbol . impl . to Location Ċ import Ġorg . jetbrains . kotlin . descriptors . NotFound Classes Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Variance Ċ import Ġorg . jetbrains . kotlin . types . type Util . make Nullable Ċ Ċ class ĠK S Type Reference Java Impl Ġprivate Ġconstructor ( val Ġpsi : ĠPsi Type ) Ġ: ĠK S Type Reference Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK S Object Cache < Psi Type , ĠK S Type Reference Java Impl >() Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Cached ( psi : ĠPsi Type ) Ġ= Ġcache . get Or Put ( psi ) Ġ{ ĠK S Type Reference Java Impl ( psi ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġorigin Ġ= ĠOrigin . JAVA ĊĊĠĠĠ Ġoverride Ġval Ġlocation : ĠLocation Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ( psi Ġas ? ĠPsi Class Reference Type )?. reference ?. to Location () Ġ?: ĠNon Exist Location ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġannotations : ĠList < KS Annotation > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġpsi . annotations . map Ġ{ ĠK S Annotation Java Impl . get Cached ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġmodifiers : ĠSet < Modifier > Ġ= Ġempty Set () ĊĊĠĠĠ Ġoverride Ġval Ġelement : ĠK S Reference Element Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠPsi Primitive Type . to Kotlin Type (): ĠKotlin Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" int " Ġ-> ĠResolver Impl . instance . module . built Ins . int Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" short " Ġ-> ĠResolver Impl . instance . module . built Ins . short Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" byte " Ġ-> ĠResolver Impl . instance . module . built Ins . byte Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" long " Ġ-> ĠResolver Impl . instance . module . built Ins . long Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float " Ġ-> ĠResolver Impl . instance . module . built Ins . float Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" double " Ġ-> ĠResolver Impl . instance . module . built Ins . double Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" char " Ġ-> ĠResolver Impl . instance . module . built Ins . char Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" boolean " Ġ-> ĠResolver Impl . instance . module . built Ins . boolean Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void " Ġ-> ĠResolver Impl . instance . module . built Ins . unit Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unexpected Ġprimitive Ġtype Ġ${ this . name }, Ġ$ Exception Message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( psi Ġis ĠPsi Wildcard Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpsi . bound ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpsi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi ClassType Ġ-> ĠK S Classifier Reference Java Impl . get Cached ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Wildcard Type Ġ-> ĠK S Classifier Reference Java Impl . get Cached ( type . extends Bound Ġas ĠPsi ClassType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Primitive Type Ġ-> ĠK S Classifier Reference Descriptor Impl . get Cached ( type . to Kotlin Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi ArrayType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Type Ġ= ĠResolver Impl . instance . resolve Java Type ( type . component Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . component Type Ġ! is ĠPsi Primitive Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK S Classifier Reference Descriptor Impl . get Cached ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResolver Impl . instance . module . built Ins . get ArrayType ( Variance . IN VARIANT , Ġcomponent Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK S Classifier Reference Descriptor Impl . get Cached ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResolver Impl . instance . module . built Ins . get Primitive Array Kotlin Type By Primitive Kotlin Type ( component Type ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠK S Classifier Reference Descriptor Impl . get Cached (( Resolver Impl . instance . built Ins . any Type Ġas ĠK S Type Impl ). kotlin Type . make Nullable ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unexpected Ġpsi Ġtype Ġfor Ġ${ type . java Class }, Ġ$ Exception Message ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresolve (): ĠK S Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Type Ġ= ĠResolver Impl . instance . resolve User Type ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(( resolved Type . declaration Ġas ? ĠK S Class Declaration Descriptor Impl )?. descriptor Ġis ĠNotFound Classes . Mock Class Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK SError Type ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġresolved Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< D , ĠR > Ġaccept ( visitor : ĠK S Visitor < D , ĠR >, Ġdata : ĠD ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvisitor . visit Type Reference ( this , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . toString () ĊĠĠĠ Ġ} Ċ }