/* Ċ Ġ* Ġ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 . de compiler . stub Builder Ċ Ċ import Ġcom . intellij . psi . stubs . Stub Element Ċ import Ġorg . jetbrains . kotlin . serialization . Flags Ċ import Ġorg . jetbrains . kotlin . serialization . Proto Buf Ċ import Ġorg . jetbrains . kotlin . psi . stubs . elements . Jet Class ElementType Ċ import Ġorg . jetbrains . kotlin . psi . stubs . impl . Kotlin Class Stub Impl Ċ import Ġorg . jetbrains . kotlin . psi . stubs . impl . Kotlin Object Stub Impl Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . psi . Jet Class Body Ċ import Ġorg . jetbrains . kotlin . psi . stubs . impl . Kotlin Place Holder Stub Impl Ċ import Ġorg . jetbrains . kotlin . psi . stubs . elements . Jet Stub Element Types Ċ import Ġorg . jetbrains . kotlin . psi . Jet Parameter List Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . psi . Jet Deleg ation Specifier List Ċ import Ġorg . jetbrains . kotlin . psi . Jet Deleg ator To Super Class Ċ import Ġorg . jetbrains . kotlin . lexer . Jet Tokens Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Proto Container Ċ import Ġorg . jetbrains . kotlin . psi . stubs . impl . Kotlin Modifier List Stub Impl Ċ import Ġorg . jetbrains . kotlin . lexer . Jet Modifier Keyword Token Ċ import Ġorg . jetbrains . kotlin . serialization . Proto Buf . Type Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . stub Builder . Flags To Modifiers .* Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins ĊĊ Ċ fun Ġcreate Class Stub ( parent : ĠStub Element < out ĠPsi Element >, Ġclass Proto : ĠProto Buf . Class , Ġclass Id : ĠClass Id , Ġcontext : ĠC ls Stub Builder Context ) Ġ{ ĊĠĠĠ ĠClass Cls Stub Builder ( parent , Ġclass Proto , Ġclass Id , Ġcontext ). build () Ċ } Ċ Ċ private Ġclass ĠClass Cls Stub Builder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparent Stub : ĠStub Element < out ĠPsi Element >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclass Proto : ĠProto Buf . Class , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclass Id : ĠClass Id , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġouter Context : ĠC ls Stub Builder Context Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġc Ġ= Ġouter Context . child ( class Proto . getType Parameter List (), Ġclass Id . get Relative ClassName (). short Name ()) ĊĠĠĠ Ġprivate Ġval Ġtype Stub Builder Ġ= ĠType Cls Stub Builder ( c ) ĊĠĠĠ Ġprivate Ġval Ġclass Kind Ġ= ĠFlags . CLASS _ KIND [ class Proto . get Flags ()] ĊĠĠĠ Ġprivate Ġval Ġsup ertype Ids Ġ= Ġclass Proto . get Sup ertype List (). map Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ-> ĊĠĠĠĠĠĠĠ Ġassert ( type . get Constructor (). get Kind () Ġ== ĠType . Constructor . Kind . CLASS ) ĊĠĠĠĠĠĠĠ Ġc . name Resolver . getClass Id ( type . get Constructor (). getId ()) ĊĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ Ġsup ertype Ids Ġ-> ĊĠĠĠĠĠĠĠ Ġ// empty Ġsup ertype Ġlist Ġif Ġsingle Ġsup ertype Ġis ĠAny ĊĠĠĠĠĠĠĠ Ġif Ġ( sup ertype Ids . single OrNull ()?. let Ġ{ ĠKotlin Built Ins . is Any ( it . as Single Fq Name ()) Ġ} Ġ?: Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsup ertype Ids ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcompanion ObjectName Ġ= Ġif Ġ( class Proto . has Companion ObjectName ()) Ġc . name Resolver . getName ( class Proto . get Companion ObjectName ()) Ġelse Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġclass Or Object Stub Ġ= Ġcreate Class Or Object Stub And Modifier List Stub () ĊĊĠĠĠ Ġfun Ġbuild () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Constraint List Data Ġ= Ġtype Stub Builder . create Type Parameter List Stub ( class Or Object Stub , Ġclass Proto . getType Parameter List ()) ĊĠĠĠĠĠĠĠ Ġcreate Constructor Stub () ĊĠĠĠĠĠĠĠ Ġcreate Deleg ation Specifier List () ĊĠĠĠĠĠĠĠ Ġtype Stub Builder . create Type Constraint List Stub ( class Or Object Stub , Ġtype Constraint List Data ) ĊĠĠĠĠĠĠĠ Ġcreate Class Body And Member Stub s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Class Or Object Stub And Modifier List Stub (): ĠStub Element < out ĠPsi Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Or Object Stub Ġ= Ġdo Create Class Or Object Stub () ĊĠĠĠĠĠĠĠ Ġval Ġmodifier List Ġ= Ġcreate Modifier List For Class ( class Or Object Stub ) ĊĠĠĠĠĠĠĠ Ġcreate Annotation Stub s ( c . components . annotation Loader . load Class Annotations ( class Proto , Ġc . name Resolver ), Ġmodifier List ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Or Object Stub ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Modifier List For Class ( parent : ĠStub Element < out ĠPsi Element >): ĠKotlin Modifier List Stub Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrelevant Flags Ġ= Ġarray ListOf ( VIS IBILITY ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Class ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelevant Flags . add ( INNER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelevant Flags . add ( MOD AL ITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġadditional Modifiers Ġ= Ġwhen Ġ( class Kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProto Buf . Class . Kind . ENUM _ CLASS Ġ-> ĠlistOf ( Jet Tokens . ENUM _ KEYWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProto Buf . Class . Kind . AN NOT ATION _ CLASS Ġ-> ĠlistOf ( Jet Tokens . AN NOT ATION _ KEYWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProto Buf . Class . Kind . CLASS _ OBJECT Ġ-> ĠlistOf ( Jet Tokens . COMP AN ION _ KEYWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠlistOf < Jet Modifier Keyword Token >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Modifier List Stub For Declaration ( parent , Ġclass Proto . get Flags (), Ġrelevant Flags , Ġadditional Modifiers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Create Class Or Object Stub (): ĠStub Element < out ĠPsi Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Companion Object Ġ= Ġclass Kind Ġ== ĠProto Buf . Class . Kind . CLASS _ OBJECT ĊĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġouter Context . container Fq Name . child ( class Id . get Relative ClassName (). short Name ()) ĊĠĠĠĠĠĠĠ Ġval Ġshort Name Ġ= Ġfq Name . short Name ()?. ref () ĊĠĠĠĠĠĠĠ Ġval Ġsuper Type Refs Ġ= Ġsup ertype Ids . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġfiltering Ġfunction Ġtypes Ġshould Ġgo Ġaway ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! Kotlin Built Ins . is Exact FunctionType ( it . as Single Fq Name ()) Ġ&& Ġ! Kotlin Built Ins . is Exact Extension FunctionType ( it . as Single Fq Name ()) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . get Relative ClassName (). short Name (). ref () Ġ}. copy ToArray () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( class Kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProto Buf . Class . Kind . OBJECT , ĠProto Buf . Class . Kind . CLASS _ OBJECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Object Stub Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Stub , Ġshort Name , Ġfq Name , Ġsuper Type Refs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis TopLevel Ġ= Ġ! class Id . is Nested Class (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Ġ= Ġis Companion Object , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Local Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Object Literal Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Class Stub Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJet Class ElementType . get Stub Type ( class Kind Ġ== ĠProto Buf . Class . Kind . ENUM _ ENTRY ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Stub , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfq Name . ref (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Type Refs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Trait Ġ= Ġclass Kind Ġ== ĠProto Buf . Class . Kind . TRA IT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enum Entry Ġ= Ġclass Kind Ġ== ĠProto Buf . Class . Kind . ENUM _ ENTRY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Local Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis TopLevel Ġ= Ġ! class Id . is Nested Class () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Constructor Stub () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Class () Ġ|| Ġ! class Proto . has Primary Constructor ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġprimary Constructor Proto Ġ= Ġclass Proto . get Primary Constructor () ĊĠĠĠĠĠĠĠ Ġif Ġ( primary Constructor Proto . has Data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Stub Builder . create Value Parameter List Stub ( class Or Object Stub , Ġprimary Constructor Proto . getData (), ĠProto Container ( class Proto , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// default Ġempty Ġconstructor ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Place Holder Stub Impl < Jet Parameter List >( class Or Object Stub , ĠJet Stub Element Types . VALUE _ PARAMETER _ LIST ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Deleg ation Specifier List () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġsingle Ġsup ertype Ġis Ġany Ġthen Ġno Ġdeleg ation Ġspec ifier Ġlist Ġis Ġneeded ĊĠĠĠĠĠĠĠ Ġif Ġ( sup ertype Ids . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdeleg ation Specifier List Stub Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Place Holder Stub Impl < Jet Deleg ation Specifier List >( class Or Object Stub , ĠJet Stub Element Types . DE LEG ATION _ SPECI FIER _ LIST ) ĊĊĠĠĠĠĠĠĠ Ġclass Proto . get Sup ertype List (). forEach Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠsuperClass Stub Ġ= ĠKotlin Place Holder Stub Impl < Jet Deleg ator To Super Class >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeleg ation Specifier List Stub , ĠJet Stub Element Types . DE LEG ATOR _ SUPER _ CLASS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Stub Builder . create Type Reference Stub ( super Class Stub , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Class Body And Member Stub s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Body Ġ= ĠKotlin Place Holder Stub Impl < Jet Class Body >( class Or Object Stub , ĠJet Stub Element Types . CLASS _ BODY ) ĊĠĠĠĠĠĠĠ Ġcreate Companion Object Stub ( class Body ) ĊĠĠĠĠĠĠĠ Ġcreate Enum Entry Stub s ( class Body ) ĊĠĠĠĠĠĠĠ Ġcreate Callable Member Stub s ( class Body ) ĊĠĠĠĠĠĠĠ Ġcreate Inner And Nested Classes ( class Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Companion Object Stub ( class Body : ĠKotlin Place Holder Stub Impl < Jet Class Body >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( comp anion ObjectName Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcompanion ObjectId Ġ= Ġclass Id . create Nested Class Id ( comp anion ObjectName ) ĊĠĠĠĠĠĠĠ Ġcreate Nested Class Stub ( class Body , Ġcompanion ObjectId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Enum Entry Stub s ( class Body : ĠKotlin Place Holder Stub Impl < Jet Class Body >) Ġ{ ĊĠĠĠĠĠĠĠ Ġclass Proto . get Enum Entry List (). forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġc . name Resolver . getName ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Class Stub Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJet Stub Element Types . ENUM _ ENTRY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualified Name Ġ= Ġc . container Fq Name . child ( name ). ref (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname . ref (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Names Ġ= Ġarray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Trait Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enum Entry Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Local Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis TopLevel Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Callable Member Stub s ( class Body : ĠKotlin Place Holder Stub Impl < Jet Class Body >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= ĠProto Container ( class Proto , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġall Members Ġ= Ġclass Proto . get Secondary Constructor List () Ġ+ Ġclass Proto . get Member List () ĊĠĠĠĠĠĠĠ Ġfor Ġ( callable Proto Ġin Ġall Members ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Callable Stub ( class Body , Ġcallable Proto , Ġc , Ġcontainer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Class (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Kind Ġ== ĠProto Buf . Class . Kind . CLASS Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Kind Ġ== ĠProto Buf . Class . Kind . ENUM _ CLASS Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Kind Ġ== ĠProto Buf . Class . Kind . AN NOT ATION _ CLASS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Inner And Nested Classes ( class Body : ĠKotlin Place Holder Stub Impl < Jet Class Body >) Ġ{ ĊĠĠĠĠĠĠĠ Ġclass Proto . get Nested ClassName List (). forEach Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnested ClassName Ġ= Ġc . name Resolver . getName ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nested ClassName Ġ!= Ġcompanion ObjectName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnested Class Id Ġ= Ġclass Id . create Nested Class Id ( nested ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Nested Class Stub ( class Body , Ġnested Class Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Nested Class Stub ( class Body : ĠStub Element < out ĠPsi Element >, Ġnested Class Id : ĠClass Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Data Ġ= Ġc . components . class Data Finder . find Class Data ( nested Class Id ) !! ĊĠĠĠĠĠĠĠ Ġcreate Class Stub ( class Body , Ġclass Data . getClass Proto (), Ġnested Class Id , Ġc . child ( class Data . getName Resolver ())) ĊĠĠĠ Ġ} Ċ } Ċ