/* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ // Ġa Ġpackage Ġis Ġomitted Ġto Ġget Ġdeclarations Ġdirectly Ġunder Ġthe Ġmodule Ċ Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . js . internal .* Ċ Ċ @ Js Name (" get K Class ") Ċ internal Ġfun Ġ< T Ġ: ĠAny > Ġget K Class ( j Class : ĠJs Class < T >): ĠK Class < T > Ġ= Ġget OrCreate K Class ( j Class ) Ċ @ Js Name (" get K Class From Expression ") Ċ internal Ġfun Ġ< T Ġ: ĠAny > Ġget K Class From Expression ( e : ĠT ): ĠK Class < T > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( js TypeOf ( e )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " Ġ-> ĠPrimitive Classes . string Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġ-> Ġif Ġ( js (" e Ġ| Ġ 0 ") Ġ=== Ġe ) ĠPrimitive Classes . int Class Ġelse ĠPrimitive Classes . double Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" boolean " Ġ-> ĠPrimitive Classes . boolean Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" function " Ġ-> ĠPrimitive Classes . function Class ( e . as Dynamic (). length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠBoolean Array Ġ-> ĠPrimitive Classes . boolean Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠChar Array Ġ-> ĠPrimitive Classes . char Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠByteArray Ġ-> ĠPrimitive Classes . byteArray Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠShort Array Ġ-> ĠPrimitive Classes . short Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠInt Array Ġ-> ĠPrimitive Classes . int Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠLong Array Ġ-> ĠPrimitive Classes . long Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠFloat Array Ġ-> ĠPrimitive Classes . float Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠDouble Array Ġ-> ĠPrimitive Classes . double Array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠK Class < *> Ġ-> ĠK Class :: class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe Ġis ĠArray < *> Ġ-> ĠPrimitive Classes . array Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġjs (" Object "). get PrototypeOf ( e ). constructor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Ġ=== Ġjs (" Object ") Ġ-> ĠPrimitive Classes . any Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Ġ=== Ġjs (" Error ") Ġ-> ĠPrimitive Classes . throwable Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjs Class : ĠJs Class < T > Ġ= Ġconstructor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget OrCreate K Class ( js Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. unsafe Cast < K Class < T >>() Ċ Ċ private Ġfun Ġ< T Ġ: ĠAny > Ġget OrCreate K Class ( j Class : ĠJs Class < T >): ĠK Class < T > Ġ{ ĊĠĠĠ Ġif Ġ( j Class Ġ=== Ġjs (" String ")) Ġreturn ĠPrimitive Classes . string Class . unsafe Cast < K Class < T >>() ĊĊĠĠĠ Ġval Ġmetadata Ġ= Ġj Class . as Dynamic (). `$ metadata $ ` ĊĊĠĠĠ Ġreturn Ġif Ġ( metadata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( metadata .` $ k Class $ ` Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Class Ġ= ĠSimple K Class Impl ( j Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata .` $ k Class $ ` Ġ= Ġk Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk Class ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata .` $ k Class $ ` ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠSimple K Class Impl ( j Class ) ĊĠĠĠ Ġ} Ċ } ĊĊ