/* Ċ ĠCopyright Ġ 2 0 2 1 ĠSm JNI ĠContributors ĊĊ Ġ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 Ġsm jni . jn igen . k sp Ċ Ċ import Ġcom . google . devtools . k sp . K sp Experimental Ċ Ċ @ K sp Experimental Ċ internal Ġclass ĠClass Content ( class Info : ĠJava Class Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcpp ClassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġclass ĠNative Method ( val Ġis Static : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Name Non Unique : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarguments : ĠList < Pair < String , ĠString ? >>) Ġ: ĠComparable < Native Method > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠNative Method ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompare Values By ( this , Ġother , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġname Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlex ico graph ically Comparable ( arguments , Ġcompare By Ġ{ Ġit . first Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠJava EntityType Ġ{ ĊĠĠĠĠĠĠĠ ĠConstructor , ĊĠĠĠĠĠĠĠ ĠMethod , ĊĠĠĠĠĠĠĠ ĠStatic Method , ĊĠĠĠĠĠĠĠ ĠField , ĊĠĠĠĠĠĠĠ ĠStatic Field ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠJava Entity ( val Ġtype : ĠJava EntityType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Final : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġallow Non Virt : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠUnique Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Arguments : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Types : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Names : ĠList < String >) Ġ: ĠComparable < Java Entity > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠJava Entity ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompare Values By ( this , Ġother , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . type Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . name . original Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlex ico graph ically Comparable ( it . arg Types ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġname Table Ġ= ĠName Table () ĊĊĠĠĠ Ġprivate Ġval Ġ_ native Methods Ġ= Ġmutable ListOf < Native Method >() ĊĠĠĠ Ġval Ġnative Methods : ĠList < Native Method > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ native Methods ĊĊĠĠĠ Ġprivate Ġval Ġ_ java Entities Ġ= Ġmutable ListOf < Java Entity >() ĊĠĠĠ Ġval Ġjava Entities : ĠList < Java Entity > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ java Entities ĊĊĠĠĠ Ġval Ġhas CppClass : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ java Entities . isNotEmpty () Ġ|| Ġnative Methods . isNotEmpty () ĊĊĠĠĠ Ġval Ġcpp Name Ġ= Ġcontext . type Map . native Name Of ( class Info . qualified Java ClassName ) ĊĊĠĠĠ Ġval Ġjava Name Ġ= Ġclass Info . qualified Java ClassName ĊĊĠĠĠ Ġval Ġconverts To Ġ= Ġclass Info . con verts To ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprevious Native Name Users Ġ= Ġmutable Map Of < String , ĠNative Method >() ĊĊĠĠĠĠĠĠĠ Ġclass Info . get Ex posed ( context ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Class Info . Native Function Ġ-> Ġadd Native Method ( it , Ġprevious Native Name Users , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Class Info . Function Ġ-> Ġif Ġ( it . is Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Java Constructor ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Java Method ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Class Info . Getter Ġ-> Ġadd Java Getter ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Class Info . Setter Ġ-> Ġadd Java Setter ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJava Class Info . Field Ġ Ġ-> Ġadd Java Field ( it , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ java Entities . sort () ĊĠĠĠĠĠĠĠ Ġ_ native Methods . sort () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Native Method ( function Info : ĠJava Class Info . Native Function , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Name Users : ĠMutable Map < String , ĠNative Method >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext ) Ġ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcallable Info Ġ= Ġfunction Info . get Callable Info ( context ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnative ReturnType Ġ= Ġcontext . type Map . native Name Of ( callable Info . returnType ) ĊĠĠĠĠĠĠĠ Ġval Ġj vm Name Ġ= Ġcallable Info . jvm Name ĊĠĠĠĠĠĠĠ Ġval Ġprevious Name User Ġ= Ġprevious Name Users [ jvm Name ] ĊĠĠĠĠĠĠĠ Ġval Ġis Name Non Unique : ĠBoolean ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Name User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Name User . is Name Non Unique Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Name Non Unique Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Name Non Unique Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġmutable ListOf < Pair < String , ĠString ?> >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" JNIEnv Ġ* ", Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Info . is Static ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" j class ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( cpp Name , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġall Params Ġ= Ġwhen ( callable Info . extension Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġempty Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsequence Of ( Pair ( callable Info . extension Receiver , Ġ" receiver ")) ĊĠĠĠĠĠĠĠ Ġ} Ġ+ Ġcallable Info . parameters . map Ġ{ ĠPair ( it . type , Ġit . name ?. asString () Ġ?: Ġ" arg ")} ĊĊĠĠĠĠĠĠĠ Ġall Params . map To ( arguments ) Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Type Ġ= Ġparam . first . resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam TypeName Ġ= Ġcontext . type Map . native Name Of ( param Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Name Ġ= Ġparam . second ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( param TypeName , Ġparam Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĠNative Method ( function Info . is Static , Ġis Name Non Unique , Ġnative ReturnType , Ġj vm Name , Ġarguments ) ĊĠĠĠĠĠĠĠ Ġ_ native Methods . add ( method ) ĊĠĠĠĠĠĠĠ Ġprevious Name Users [ jvm Name ] Ġ= Ġmethod ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Callable ( callable Info : ĠJava Class Info . Callable Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Constructor : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Static : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisOpen : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Non Virt : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġname Table . allocate Name ( if Ġ( is Constructor ) Ġcontext . ctor Name Ġelse Ġcallable Info . jvm Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemplate Arguments Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġarg Types Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġarg Names Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnative ReturnType : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( is Constructor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( cpp Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative ReturnType Ġ= Ġ" sm jni :: local _ java _ ref <$ cpp Name >" ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Return TypeName Ġ= Ġcontext . type Map . native Name Of ( callable Info . returnType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( base Return TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative ReturnType Ġ= Ġcontext . type Map . wrapper Name Of ( base Return TypeName , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( cpp Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Static ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg Types . add ( context . type Map . wrapper Name Of ( cpp Name , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg Names . add (" self ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġall Params Ġ= Ġwhen ( callable Info . extension Receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġempty Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsequence Of ( Pair ( callable Info . extension Receiver , Ġ" receiver ")) ĊĠĠĠĠĠĠĠ Ġ} Ġ+ Ġcallable Info . parameters . map Ġ{ ĠPair ( it . type , Ġit . name ?. asString () Ġ?: Ġ" arg ")} ĊĊĠĠĠĠĠĠĠ Ġall Params . forEach Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Type Ġ= Ġparam . first . resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam TypeName Ġ= Ġcontext . type Map . native Name Of ( param Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( param TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Types . add ( context . type Map . wrapper Name Of ( param TypeName , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Name Ġ= Ġparam . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Names . add ( param Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġif Ġ( is Constructor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Entity ( Java EntityType . Constructor , Ġis Final Ġ= Ġfalse , Ġallow Non Virt Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmethodName , Ġtemplate Arguments , Ġnative ReturnType , Ġarg Types , Ġarg Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( is Static ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Entity ( Java EntityType . Static Method , Ġis Final Ġ= Ġ! isOpen , Ġallow Non Virt Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmethodName , Ġtemplate Arguments , Ġnative ReturnType , Ġarg Types , Ġarg Names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Entity ( Java EntityType . Method , Ġis Final Ġ= Ġ! isOpen , Ġallow Non Virt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmethodName , Ġtemplate Arguments , Ġnative ReturnType , Ġarg Types , Ġarg Names ) ĊĊĠĠĠĠĠĠĠ Ġ_ java Entities . add ( method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Field ( field Info : ĠJava Class Info . Field , Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġis Writable Ġ= Ġfield Info . is Mutable ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġname Table . allocate Name ( field Info . jvm Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemplate Arguments Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġarg Types Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġval Ġarg Names Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠ Ġval ĠfieldType Ġ= Ġfield Info . type ĊĠĠĠĠĠĠĠ Ġval Ġfield TypeName Ġ= Ġcontext . type Map . native Name Of ( fieldType ) ĊĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( field TypeName ) ĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġcontext . type Map . wrapper Name Of ( field TypeName , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtemplate Arguments . add ( cpp Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! field Info . is Static ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Types . add ( context . type Map . wrapper Name Of ( cpp Name , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Names . add (" self ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġarg Types . add ( context . type Map . wrapper Name Of ( field TypeName , Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠJava Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Info . is Static ) ĠJava EntityType . Static Field Ġelse ĠJava EntityType . Field , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! is Writable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġ// mean ing less Ġfor Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName , Ġtemplate Arguments , ĠreturnType , Ġarg Types , Ġarg Names ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ_ java Entities . add ( field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Constructor ( constructor Info : ĠJava Class Info . Function , Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġadd Java Callable ( constructor Info . get Callable Info ( context ), Ġis Constructor Ġ= Ġtrue , Ġis Static Ġ= Ġfalse , ĠisOpen Ġ= Ġfalse , Ġallow Non Virt Ġ= Ġfalse , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Method ( function Info : ĠJava Class Info . Function , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġallow Non Virt Ġ= Ġfunction Info . called By Native . arguments . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name ?. get ShortName () Ġ== Ġ" allow Non Virtual Call " Ġ} ?. value Ġas ? ĠBoolean Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġadd Java Callable ( function Info . get Callable Info ( context ), Ġis Constructor Ġ= Ġfalse , Ġfunction Info . is Static , Ġfunction Info . isOpen , Ġallow Non Virt , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Getter ( getter : ĠJava Class Info . Getter , Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġallow Non Virt Ġ= Ġgetter . called By Native . arguments . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name ?. get ShortName () Ġ== Ġ" allow Non Virtual Call " Ġ} ?. value Ġas ? ĠBoolean Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġadd Java Callable ( getter . get Callable Info ( context ), Ġis Constructor Ġ= Ġfalse , Ġgetter . is Static , Ġgetter . isOpen , Ġallow Non Virt , Ġcontext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Java Setter ( setter : ĠJava Class Info . Setter , Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġallow Non Virt Ġ= Ġsetter . called By Native . arguments . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name ?. get ShortName () Ġ== Ġ" allow Non Virtual Call " Ġ} ?. value Ġas ? ĠBoolean Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġadd Java Callable ( setter . get Callable Info ( context ), Ġfalse , Ġsetter . is Static , Ġsetter . isOpen , Ġallow Non Virt , Ġcontext ) ĊĠĠĠ Ġ} Ċ Ċ }