// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . kotlin . analysis . de compiler . stub Ċ Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotation Use Site Target Ċ import Ġorg . jetbrains . kotlin . metadata . Proto Buf Ċ import Ġorg . jetbrains . kotlin . metadata . de serialization . Name Resolver Ċ import Ġorg . jetbrains . kotlin . metadata . de serialization . Type Table Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Annotation Loader Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Class Data Finder Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Proto Container Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . getName Ċ Ċ data Ġclass ĠClass Id With Target ( val Ġclass Id : ĠClass Id , Ġval Ġtarget : ĠAnnotation Use Site Target ?) Ċ Ċ class ĠC ls Stub Builder Components ( ĊĠĠĠ Ġval Ġclass Data Finder : ĠClass Data Finder , ĊĠĠĠ Ġval Ġannotation Loader : ĠAnnotation Loader < Class Id >, ĊĠĠĠ Ġval Ġvirtual File For Debug : ĠVirtual File Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Context ( ĊĠĠĠĠĠĠĠ Ġname Resolver : ĠName Resolver , ĊĠĠĠĠĠĠĠ Ġpackage Fq Name : ĠF q Name , ĊĠĠĠĠĠĠĠ Ġtype Table : ĠType Table ĊĠĠĠ Ġ): ĠC ls Stub Builder Context Ġ= ĊĠĠĠĠĠĠĠ ĠC ls Stub Builder Context ( this , Ġname Resolver , Ġpackage Fq Name , ĠEmpty Type Parameters , Ġtype Table , Ġproto Container Ġ= Ġnull ) Ċ } Ċ Ċ interface ĠType Parameters Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġget ( id : ĠInt ): ĠName ĊĊĠĠĠ Ġfun Ġchild ( name Resolver : ĠName Resolver , Ġinner Type Parameters : ĠList < Proto Buf . Type Parameter >) Ġ= ĊĠĠĠĠĠĠĠ ĠType Parameters Impl ( name Resolver , Ġinner Type Parameters , Ġparent Ġ= Ġthis ) Ċ } Ċ Ċ object ĠEmpty Type Parameters Ġ: ĠType Parameters Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget ( id : ĠInt ): ĠName Ġ= Ġthrow ĠIllegalStateException (" Unknown Ġtype Ġparameter Ġwith Ġid Ġ= Ġ$ id ") Ċ } Ċ Ċ class ĠType Parameters Impl ( ĊĠĠĠ Ġname Resolver : ĠName Resolver , ĊĠĠĠ Ġtype Parameter Protos : ĠCollection < Proto Buf . Type Parameter >, ĊĠĠĠ Ġprivate Ġval Ġparent : ĠType Parameters Ċ ) Ġ: ĠType Parameters Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtype Parameters ById Ġ= Ġtype Parameter Protos . map Ġ{ ĠPair ( it . id , Ġname Resolver . getName ( it . name )) Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġget ( id : ĠInt ): ĠName Ġ= Ġtype Parameters ById [ id ] Ġ?: Ġparent [ id ] Ċ } Ċ Ċ class ĠC ls Stub Builder Context ( ĊĠĠĠ Ġval Ġcomponents : ĠC ls Stub Builder Components , ĊĠĠĠ Ġval Ġname Resolver : ĠName Resolver , ĊĠĠĠ Ġval Ġcontainer Fq Name : ĠF q Name , ĊĠĠĠ Ġval Ġtype Parameters : ĠType Parameters , ĊĠĠĠ Ġval Ġtype Table : ĠType Table , ĊĠĠĠ Ġval Ġproto Container : ĠProto Container . Class ? Ċ ) Ċ Ċ internal Ġfun ĠC ls Stub Builder Context . child ( ĊĠĠĠ Ġtype Parameter List : ĠList < Proto Buf . Type Parameter >, ĊĠĠĠ Ġname : ĠName ? Ġ= Ġnull , ĊĠĠĠ Ġname Resolver : ĠName Resolver Ġ= Ġthis . name Resolver , ĊĠĠĠ Ġtype Table : ĠType Table Ġ= Ġthis . type Table , ĊĠĠĠ Ġproto Container : ĠProto Container . Class ? Ġ= Ġthis . proto Container Ċ ): ĠC ls Stub Builder Context Ġ= ĠC ls Stub Builder Context ( ĊĠĠĠ Ġthis . components , ĊĠĠĠ Ġname Resolver , ĊĠĠĠ Ġif Ġ( name Ġ!= Ġnull ) Ġthis . container Fq Name . child ( name ) Ġelse Ġthis . container Fq Name , ĊĠĠĠ Ġthis . type Parameters . child ( name Resolver , Ġtype Parameter List ), ĊĠĠĠ Ġtype Table , ĊĠĠĠ Ġproto Container Ċ ) Ċ