/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . backend . js Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . descriptors . Descriptors Factory Ċ import Ġorg . jetbrains . kotlin . builtins . Companion Object Mapping . is Mapped Intr insic Companion Object Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotations Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Class Constructor Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Property Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Value Parameter Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . ir . symbols . Ir Constructor Symbol Ċ import Ġorg . jetbrains . kotlin . ir . symbols . impl . Ir Constructor Symbol Impl Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġjava . util .* Ċ Ċ class ĠJs Descriptors Factory ( ĊĠĠĠ Ġprivate Ġval Ġbuilt Ins : ĠKotlin Built Ins Ċ ) Ġ: ĠDes cript ors Factory Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsingleton Field Descriptors Ġ= ĠHashMap < Class Descriptor , ĠProperty Descriptor >() ĊĠĠĠ Ġprivate Ġval Ġouter This Descriptors Ġ= ĠHashMap < Class Descriptor , ĠProperty Descriptor >() ĊĠĠĠ Ġprivate Ġval Ġinner Class Construct ors Ġ= ĠHashMap < Class Constructor Descriptor , ĠIr Constructor Symbol >() ĊĊĠĠĠ Ġoverride Ġfun Ġget FieldDescriptor For Enum Entry ( enum Entry Descriptor : ĠClass Descriptor ): ĠProperty Descriptor Ġ= ĠTODO () ĊĊĠĠĠ Ġoverride Ġfun Ġget Outer This FieldDescriptor ( inner Class Descriptor : ĠClass Descriptor ): ĠProperty Descriptor Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ(! inner Class Descriptor . is Inner ) Ġthrow ĠAssertionError (" Class Ġis Ġnot Ġinner : Ġ$ inner Class Descriptor ") ĊĠĠĠĠĠĠĠ Ġelse Ġouter This Descriptors . get Or Put ( inner Class Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġouter Class Descriptor Ġ= ĠDescriptor Utils . get Containing Class ( inner Class Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠAssertionError (" No Ġcontaining Ġclass Ġfor Ġinner Ġclass Ġ$ inner Class Descriptor ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Descriptor Impl . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Class Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAn notations . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMod ality . FINAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . PROTECT ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠName . identifier ("\ $ this "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCallable Member Descriptor . Kind . SYN TH ES IZED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSource Element . NO _ SOURCE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġouter Class Descriptor . default Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Class Descriptor . this As Receiver Parameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġas ? ĠReceiver Parameter Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Inner Class Constructor With Outer This Parameter ( inner Class Constructor : ĠClass Constructor Descriptor ): ĠIr Constructor Symbol Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinner Class Ġ= Ġinner Class Constructor . containing Declaration ĊĠĠĠĠĠĠĠ Ġassert ( inner Class . is Inner ) Ġ{ Ġ" Class Ġis Ġnot Ġinner : Ġ$ inner Class " Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinner Class Construct ors . get Or Put ( inner Class Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Inner Class Constructor With Outer This Parameter ( inner Class Constructor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Inner Class Constructor With Outer This Parameter ( old Descriptor : ĠClass Constructor Descriptor ): ĠIr Constructor Symbol Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġold Descriptor . containing Declaration ĊĠĠĠĠĠĠĠ Ġval Ġouter This Type Ġ= Ġ( class Descriptor . containing Declaration Ġas ĠClass Descriptor ). default Type ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Descriptor Ġ= ĠClass Constructor Descriptor Impl . create Synt hesized ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Descriptor , Ġold Descriptor . annotations , Ġold Descriptor . is Primary , Ġold Descriptor . source ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġouter This Value Parameter Ġ= ĠValue Parameter Descriptor Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAn notations . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠName . identifier ("\ $ outer "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġouter This Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSource Element . NO _ SOURCE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠnewValue Parameters Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( outer This Value Parameter ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Descriptor . value Parameters . map Ġ{ Ġit . copy ( new Descriptor , Ġit . name , Ġit . index Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġnew Descriptor . initialize ( newValue Parameters , Ġold Descriptor . visibility ) ĊĠĠĠĠĠĠĠ Ġnew Descriptor . returnType Ġ= Ġold Descriptor . returnType ĊĠĠĠĠĠĠĠ Ġreturn ĠIr Constructor Symbol Impl ( new Descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget FieldDescriptor For Object Instance ( object Descriptor : ĠClass Descriptor ): ĠProperty Descriptor Ġ= ĊĠĠĠĠĠĠĠ Ġsingleton Field Descriptors . get Or Put ( object Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Object Instance FieldDescriptor ( object Descriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Object Instance FieldDescriptor ( object Descriptor : ĠClass Descriptor ): ĠProperty Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( object Descriptor . kind Ġ== ĠClass Kind . OBJECT ) Ġ{ Ġ" Should Ġbe Ġan Ġobject : Ġ$ object Descriptor " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis Not Mapped Companion Ġ= Ġobject Descriptor . is Companion Object Ġ&& Ġ! is Mapped Intr insic Companion Object ( object Descriptor ) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( isNot Mapped Companion ) Ġobject Descriptor . name Ġelse ĠName . identifier (" INSTANCE ") ĊĠĠĠĠĠĠĠ Ġval Ġcontaining Declaration Ġ= Ġif Ġ( isNot Mapped Companion ) Ġobject Descriptor . containing Declaration Ġelse Ġobject Descriptor ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Descriptor Impl . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Declaration , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAn notations . EMPTY , ĠMod ality . FINAL , ĠVis ibilities . PUBLIC , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCallable Member Descriptor . Kind . SYN TH ES IZED , ĠSource Element . NO _ SOURCE , Ġ/* Ġlate Init Ġ= Ġ*/ Ġfalse , Ġ/* Ġis Const Ġ= Ġ*/ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġis Expect Ġ= Ġ*/ Ġfalse , Ġ/* Ġis Actual Ġ= Ġ*/ Ġfalse , Ġ/* Ġis External Ġ= Ġ*/ Ġfalse , Ġ/* Ġis Deleg ated Ġ= Ġ*/ Ġfalse ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Type ( object Descriptor . default Type , Ġempty List (), Ġnull , Ġnull Ġas ĠReceiver Parameter Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( null , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ