/* Ċ Ġ* Ġ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 . binary Ċ Ċ import Ġcom . google . devtools . k sp . KS Object Cache Ċ import Ġcom . google . devtools . k sp . symbol .* Ċ import Ġorg . jetbrains . kotlin . descriptors . Classifier Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Classifier Descriptor WithType Parameters Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Type Projection Ċ Ċ class ĠK S Classifier Reference Descriptor Impl Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġdescriptor : ĠClass ifier Descriptor , ĊĠĠĠ Ġval Ġarguments : ĠList < Type Projection >, ĊĠĠĠ Ġoverride Ġval Ġorigin : ĠOrigin , ĊĠĠĠ Ġoverride Ġval Ġparent : ĠK S Node ? Ċ ) Ġ: ĊĠĠĠ ĠK S Classifier Reference Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK S Object Cache < Triple < Classifier Descriptor , ĠList < Type Projection >, ĠPair < KS Node ?, ĠOrigin >>, ĊĠĠĠĠĠĠĠ ĠK S Classifier Reference Descriptor Impl >() Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Cached ( kotlin Type : ĠKotlin Type , Ġorigin : ĠOrigin , Ġparent : ĠK S Node ?) Ġ= Ġcache . get Or Put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Type . constructor . declaration Descriptor !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Type . arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( parent , Ġorigin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK S Classifier Reference Descriptor Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Type . constructor . declaration Descriptor !! , Ġkotlin Type . arguments , Ġorigin , Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Cached ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠClass ifier Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments : ĠList < Type Projection >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin : ĠOrigin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠK S Node ? ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġcache . get Or Put ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( descriptor , Ġarguments , ĠPair ( parent , Ġorigin )) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĠK S Classifier Reference Descriptor Impl ( descriptor , Ġarguments , Ġorigin , Ġparent ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġn Declared Args Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ( descriptor Ġas ? ĠClass ifier Descriptor WithType Parameters )?. declared Type Parameters ?. size Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlocation : ĠLocation Ġ= ĠNon Exist Location ĊĊĠĠĠ Ġoverride Ġval Ġqualifier : ĠK S Classifier Reference ? Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġouter Descriptor Ġ= Ġdescriptor . containing Declaration Ġas ? ĠClass ifier Descriptor Ġ?: Ġreturn @ lazy Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġouter Arguments Ġ= Ġarguments . drop ( n Declared Args ) ĊĠĠĠĠĠĠĠ Ġget Cached ( outer Descriptor , Ġouter Arguments , Ġorigin , Ġparent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġtype Arguments : ĠList < KS Type Argument > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġarguments . map Ġ{ ĠK S Type Argument Descriptor Impl . get Cached ( it , Ġorigin , Ġthis . parent ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreferenced Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeclared Args Ġ= Ġif Ġ( arguments . isEmpty () Ġ|| Ġn Declared Args Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . sub List ( 0 , Ġn Declared Args ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdescriptor . name . asString () Ġ+ Ġif Ġ( declared Args . isNotEmpty ()) Ġ"< ${ ĊĠĠĠĠĠĠĠ Ġdeclared Args . map Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (", Ġ") ĊĠĠĠĠĠĠĠ Ġ} >" Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġreferenced Name () Ċ } Ċ