/* Ċ Ġ* Ġ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 Ġkotlin . reflect . jvm . internal Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Function Descriptor Ċ import Ġjava . lang . reflect . Constructor Ċ import Ġjava . lang . reflect . Member Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġkotlin . jvm . internal . Callable Reference Ċ import Ġkotlin . jvm . internal . Function Base Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . jvm . internal . Jvm Function Signature .* Ċ import Ġkotlin . reflect . jvm . internal . calls .* Ċ import Ġkotlin . reflect . jvm . internal . calls . Annotation Constructor Caller . Call Mode . CALL _ BY _ NAME Ċ import Ġkotlin . reflect . jvm . internal . calls . Annotation Constructor Caller . Call Mode . POSITION AL _ CALL Ċ import Ġkotlin . reflect . jvm . internal . calls . Annotation Constructor Caller . Origin . JAVA Ċ import Ġkotlin . reflect . jvm . internal . calls . Annotation Constructor Caller . Origin . K OT LIN Ċ Ċ internal Ġclass ĠK Function Impl Ġprivate Ġconstructor ( ĊĠĠĠ Ġoverride Ġval Ġcontainer : ĠK Declaration Container Impl , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsignature : ĠString , ĊĠĠĠ Ġdescriptor Initial Value : ĠFunction Descriptor ?, ĊĠĠĠ Ġprivate Ġval Ġraw Bound Receiver : ĠAny ? Ġ= ĠCallable Reference . NO _ RECE IVER Ċ ) Ġ: ĠK Callable Impl < Any ?> (), ĠK Function < Any ? >, ĠFunction Base < Any ? >, ĠFunction With All Inv okes Ġ{ ĊĠĠĠ Ġconstructor ( container : ĠK Declaration Container Impl , Ġname : ĠString , Ġsignature : ĠString , Ġbound Receiver : ĠAny ?) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġthis ( container , Ġname , Ġsignature , Ġnull , Ġbound Receiver ) ĊĊĠĠĠ Ġconstructor ( container : ĠK Declaration Container Impl , Ġdescriptor : ĠFunction Descriptor ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠ Ġdescriptor . name . asString (), ĊĠĠĠĠĠĠĠ ĠRuntimeType Mapper . map Signature ( descriptor ). asString (), ĊĠĠĠĠĠĠĠ Ġdescriptor ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġval Ġis Bound : ĠBoolean Ġget () Ġ= Ġraw Bound Receiver Ġ!= ĠCallable Reference . NO _ RECE IVER ĊĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠFunction Descriptor Ġby ĠReflect Properties . lazy Soft ( descriptor Initial Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontainer . find Function Descriptor ( name , Ġsignature ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġget () Ġ= Ġdescriptor . name . asString () ĊĊĠĠĠ Ġoverride Ġval Ġcaller : ĠCall er < *> Ġby ĠReflect Properties . lazy Soft Ġcaller @{ ĊĠĠĠĠĠĠĠ Ġval Ġj vm Signature Ġ= ĠRuntimeType Mapper . map Signature ( descriptor ) ĊĠĠĠĠĠĠĠ Ġval Ġmember : ĠMember ? Ġ= Ġwhen Ġ( jvm Signature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Constructor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Annotation Constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ caller ĠAnnotation Constructor Caller ( container . j Class , Ġparameters . map Ġ{ Ġit . name !! Ġ}, ĠPOSITION AL _ CALL , ĠK OT LIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . find Constructor By Signature ( jvm Signature . constructor Desc , Ġdescriptor . is Public In Byte code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Function Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . find Method By Signature ( jvm Signature . methodName , Ġj vm Signature . method Desc , Ġdescriptor . is Public In Byte code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Method Ġ-> Ġj vm Signature . method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Constructor Ġ-> Ġj vm Signature . constructor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFake Java Annotation Constructor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġj vm Signature . methods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ caller ĠAnnotation Constructor Caller ( container . j Class , Ġmethods . map Ġ{ Ġit . name Ġ}, ĠPOSITION AL _ CALL , ĠJAVA , Ġmethods ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConstructor < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Constructor Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMethod Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Modifier . is Static ( member . modifiers ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Instance Method Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . annotations . find Annotation ( JVM _ STATIC ) Ġ!= Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Jvm Static In Object Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Static Method Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠKotlin Reflection Internal Error (" Could Ġnot Ġcompute Ġcaller Ġfor Ġfunction : Ġ$ descriptor Ġ( member Ġ= Ġ$ member )") ĊĠĠĠĠĠĠĠ Ġ}. create Inline Class Aware Caller IfNeeded ( descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdefault Caller : ĠCall er < *> ? Ġby ĠReflect Properties . lazy Soft Ġdefault Caller @{ ĊĠĠĠĠĠĠĠ Ġval Ġj vm Signature Ġ= ĠRuntimeType Mapper . map Signature ( descriptor ) ĊĠĠĠĠĠĠĠ Ġval Ġmember : ĠMember ? Ġ= Ġwhen Ġ( jvm Signature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Function Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . find Default Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Signature . methodName , Ġj vm Signature . method Desc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Modifier . is Static ( caller . member !!. modifiers ), Ġdescriptor . is Public In Byte code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠKotlin Constructor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Annotation Constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ default Caller ĠAnnotation Constructor Caller ( container . j Class , Ġparameters . map Ġ{ Ġit . name !! Ġ}, ĠCALL _ BY _ NAME , ĠK OT LIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . find Default Constructor ( jvm Signature . constructor Desc , Ġdescriptor . is Public In Byte code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFake Java Annotation Constructor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġj vm Signature . methods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ default Caller ĠAnnotation Constructor Caller ( container . j Class , Ġmethods . map Ġ{ Ġit . name Ġ}, ĠCALL _ BY _ NAME , ĠJAVA , Ġmethods ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJava Ġmethods , ĠJava Ġconstructors Ġand Ġbuilt - ins Ġdon 't Ġhave Ġ$ default Ġmethods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( member ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConstructor < *> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Constructor Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMethod Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġstatic Ġ$ default Ġmethods Ġfor Ġ@ Jvm Static Ġfunctions Ġare Ġgenerated Ġdifferently Ġin Ġobjects Ġand Ġcompanion Ġobjects . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġobjects , Ġ$ default 's Ġsignature Ġdoes Ġ_ not _ Ġcontain Ġthe Ġadditional Ġobject Ġinstance Ġparameter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġas Ġopposed Ġto Ġcompanion Ġobjects Ġwhere Ġthe Ġfirst Ġparameter Ġis Ġthe Ġcompanion Ġobject Ġinstance . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . annotations . find Annotation ( JVM _ STATIC ) Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!( descriptor . containing Declaration Ġas ĠClass Descriptor ). is Companion Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Jvm Static In Object Caller ( member ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Static Method Caller ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ?. create Inline Class Aware Caller IfNeeded ( descriptor , Ġis Default Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbound Receiver ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġraw Bound Receiver . coerce To Expected Receiver Type ( descriptor ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Static Method Caller ( member : ĠMethod ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) ĠCall er Impl . Method . Bound Static ( member , Ġbound Receiver ) Ġelse ĠCall er Impl . Method . Static ( member ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Jvm Static In Object Caller ( member : ĠMethod ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) ĠCall er Impl . Method . Bound Jvm Static In Object ( member ) Ġelse ĠCall er Impl . Method . Jvm Static In Object ( member ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Instance Method Caller ( member : ĠMethod ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) ĠCall er Impl . Method . Bound Instance ( member , Ġbound Receiver ) Ġelse ĠCall er Impl . Method . Instance ( member ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Constructor Caller ( member : ĠConstructor <* >) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Bound ) ĠCall er Impl . Bound Constructor ( member , Ġbound Receiver ) Ġelse ĠCall er Impl . Constructor ( member ) ĊĊĠĠĠ Ġoverride Ġval Ġar ity : ĠInt Ġget () Ġ= Ġcaller . arity ĊĊĠĠĠ Ġoverride Ġval Ġis Inline : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdescriptor . is Inline ĊĊĠĠĠ Ġoverride Ġval Ġis External : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdescriptor . is External ĊĊĠĠĠ Ġoverride Ġval Ġis Operator : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdescriptor . is Operator ĊĊĠĠĠ Ġoverride Ġval ĠisIn fix : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdescriptor . isIn fix ĊĊĠĠĠ Ġoverride Ġval Ġis Suspend : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdescriptor . is Suspend ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthat Ġ= Ġother . as K Function Impl () Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġcontainer Ġ== Ġthat . container Ġ&& Ġname Ġ== Ġthat . name Ġ&& Ġsignature Ġ== Ġthat . signature Ġ&& Ġraw Bound Receiver Ġ== Ġthat . raw Bound Receiver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġ( container . hashCode () Ġ* Ġ 3 1 Ġ+ Ġname . hashCode ()) Ġ* Ġ 3 1 Ġ+ Ġsignature . hashCode () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠReflection Object Renderer . render Function ( descriptor ) Ċ } Ċ