/* Ċ Ġ* Ġ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 . built Ins Ċ Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . compiled . Cls Stub Builder Ċ import Ġcom . intellij . psi . impl . compiled . Class File Stub Builder Ċ import Ġcom . intellij . psi . stubs . Psi File Stub Ċ import Ġcom . intellij . util . indexing . FileContent Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġorg . jetbrains . kotlin . builtins . BuiltIn Serializer Protocol Ċ import Ġorg . jetbrains . kotlin . builtins . Built Ins Serialized Resource Paths Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . common . Annotation Loader For Stub Builder Impl Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . common . Directory Based Class Data Finder Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . common . to Class Proto Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . common . to Package Proto Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . stub Builder . Cls Stub Builder Components Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . stub Builder . create Package Facade Stub Ċ import Ġorg . jetbrains . kotlin . idea . de compiler . stub Builder . create TopLevel Class Stub Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi . stubs . impl . Kotlin File Stub Impl Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Name Resolver Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Name Resolver Impl Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Type Table Ċ import Ġjava . io . ByteArray InputStream Ċ Ċ class ĠKotlin BuiltIn Stub Builder Ġ: ĠC ls Stub Builder () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Stub Version () Ġ= ĠClass File Stub Builder . ST UB _ VERSION Ġ+ Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġbuild File Stub ( content : ĠFile Content ): ĠPsi File Stub < *> ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Internal BuiltIn File ( content . file )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdo Build File Stub ( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Only ĊĠĠĠ Ġfun Ġdo Build File Stub ( content : ĠFile Content ): ĠKotlin File Stub Impl ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġcontent . file ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġfile . parent !! ĊĠĠĠĠĠĠĠ Ġval Ġname Resolver Ġ= Ġread String Table ( directory , ĠLOG ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcontent As Bytes Ġ= Ġcontent . content ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( file . fileType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin BuiltIn Package FileType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Proto Ġ= Ġcontent As Bytes . to Package Proto ( Built Ins Serialized Resource Paths . extension Registry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Fq Name Ġ= Ġpackage Proto . package Fq Name ( name Resolver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġcreate Stub Builder Components ( file , Ġpackage Fq Name , Ġname Resolver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcomponents . create Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Resolver , Ġpackage Fq Name , ĠType Table ( package Proto . type Table ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Package Facade Stub ( package Proto , Ġpackage Fq Name , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin BuiltIn Class FileType Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Proto Ġ= Ġcontent As Bytes . to Class Proto ( Built Ins Serialized Resource Paths . extension Registry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Id Ġ= Ġname Resolver . getClass Id ( class Proto . fq Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Fq Name Ġ= Ġclass Id . package Fq Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= Ġcreate Stub Builder Components ( file , Ġpackage Fq Name , Ġname Resolver ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcomponents . create Context ( name Resolver , Ġpackage Fq Name , ĠType Table ( class Proto . type Table )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate TopLevel Class Stub ( class Id , Ġclass Proto , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġfile type Ġ${ file . fileType }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Stub Builder Components ( file : ĠVirtual File , Ġpackage Fq Name : ĠF q Name , Ġname Resolver : ĠName Resolver ): ĠC ls Stub Builder Components Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinder Ġ= ĠDirectory Based Class Data Finder ( file . parent !! , Ġpackage Fq Name , Ġname Resolver , ĠBuilt Ins Serialized Resource Paths ) ĊĠĠĠĠĠĠĠ Ġval Ġannotation Loader Ġ= ĠAnnotation Loader For Stub Builder Impl ( BuiltIn Serializer Protocol ) ĊĠĠĠĠĠĠĠ Ġreturn ĠC ls Stub Builder Components ( finder , Ġannotation Loader , Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠLOG Ġ= ĠLogger . getInstance ( Kotlin BuiltIn Stub Builder :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġread String Table ( directory : ĠVirtual File , Ġlog : ĠLogger ): ĠName Resolver Impl ? Ġ{ ĊĠĠĠ Ġval Ġstrings FileName Ġ= Ġ"${ directory . name }.${ Built Ins Serialized Resource Paths . STRING _ TABLE _ FILE _ EXTENSION }" ĊĠĠĠ Ġval Ġstring Table File Ġ= Ġdirectory . find File By RelativePath ( strings FileName ) Ġ?: Ġreturn Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . error ("$ strings FileName Ġnot Ġfound Ġin Ġ$ directory ") ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġname Resolver Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠName Resolver Impl . read ( ByteArray InputStream ( string Table File . contents To ByteArray ( false ))) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . error (" Error Ġreading Ġdata Ġfrom Ġ$ string Table File Ġ", Ġe ) ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġname Resolver Ċ } Ċ