package Ġnet . cord a . dj vm Ċ Ċ import Ġfoo . bar . sandbox . Callable Ċ import Ġnet . cord a . dj vm . analysis . Analysis Configuration Ċ import Ġnet . cord a . dj vm . analysis . Analysis Context Ċ import Ġnet . cord a . dj vm . analysis . Class And Member Visitor Ċ import Ġnet . cord a . dj vm . analysis . Whitelist Ċ import Ġnet . cord a . dj vm . assertions . Assertion Extensions . assertThat Ċ import Ġnet . cord a . dj vm . code . Definition Provider Ċ import Ġnet . cord a . dj vm . code . Emitter Ċ import Ġnet . cord a . dj vm . execution . Execution Profile Ċ import Ġnet . cord a . dj vm . messages . Severity Ċ import Ġnet . cord a . dj vm . references . Class Hierarchy Ċ import Ġnet . cord a . dj vm . rew iring . Loaded Class Ċ import Ġnet . cord a . dj vm . rew iring . Sandbox ClassLoader Ċ import Ġnet . cord a . dj vm . rules . Rule Ċ import Ġnet . cord a . dj vm . rules . implementation .* Ċ import Ġnet . cord a . dj vm . source . Bootstrap ClassLoader Ċ import Ġnet . cord a . dj vm . source . Class Source Ċ import Ġnet . cord a . dj vm . source . Sandbox Source ClassLoader Ċ import Ġnet . cord a . dj vm . utilities . Discovery Ċ import Ġnet . cord a . dj vm . validation . Rule Validator Ċ import Ġorg . junit . After Ċ import Ġorg . junit . After Class Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . object web . asm . Class Reader Ċ import Ġorg . object web . asm . Class Writer Ċ import Ġorg . object web . asm . Type Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . concurrent . thread Ċ import Ġkotlin . reflect . jvm . jvm Name Ċ Ċ abstract Ġclass ĠTest Base Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠALL _ R ULES Ġ= ĠDiscovery . find < Rule >() ĊĊĠĠĠĠĠĠĠ Ġval ĠALL _ EM IT TER S Ġ= ĠDiscovery . find < Emitter >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġat Ġleast Ġthese Ġemitter s Ġto Ġhandle Ġthe ĠJava ĠAPI Ġclasses . ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠBAS IC _ EM IT TER S : ĠList < Emitter > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlways Inherit From Sandbox ed Object (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument Un wrapper (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandle Exception Un wrapper (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReturn Type Wrapper (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Class Methods (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Object Methods (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Constant Wrapper (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThrow Exception Wrapper () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠALL _ DEFINITION _ PRO VID ERS Ġ= ĠDiscovery . find < Definition Provider >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġat Ġleast Ġthese Ġproviders Ġto Ġhandle Ġthe ĠJava ĠAPI Ġclasses . ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠBAS IC _ DEFINITION _ PRO VID ERS : ĠList < Definition Provider > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlways Inherit From Sandbox ed Object (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Constant Rem over () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠBL ANK Ġ= Ġempty Set < Any >() ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT Ġ= Ġ( ALL _ R ULES Ġ+ ĠALL _ EM IT TER S Ġ+ ĠALL _ DEFINITION _ PRO VID ERS ). distinct By ( Any :: java Class ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠDET ER MIN ISTIC _ RT : ĠPath Ġ= ĠPaths . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . getProperty (" determin istic - rt . path ") Ġ?: Ġthrow ĠAssertionError (" determin istic - rt . path Ġproperty Ġnot Ġset ")) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġparent Configuration : ĠSandbox Configuration ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġparent ClassLoader : ĠSandbox ClassLoader ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġfull Ġname Ġof Ġtype Ġ[ T ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġname Of ( prefix : ĠString Ġ= Ġ"") Ġ= Ġ"$ prefix ${ Type . get Internal Name ( T :: class . java )}" ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġsetup Parent ClassLoader () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Configuration Ġ= ĠAnalysis Configuration . create Root ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWh itelist . MIN IMAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap ClassLoader Ġ= ĠBootstrap ClassLoader ( DE TERMIN ISTIC _ RT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource ClassLoader Factory Ġ= Ġ{ Ġclass Resolver , Ġbootstrap ClassLoader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSandbox Source ClassLoader ( class Resolver , Ġ Ġbootstrap ClassLoader !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Pin ned Classes Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtilities :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map ( Type :: get Internal Name ). toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration Ġ= ĠSandbox Configuration . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExecution Profile . UN LIMIT ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠALL _ R ULES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠALL _ EM IT TER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠALL _ DEFINITION _ PRO VID ERS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent ClassLoader Ġ= ĠSandbox ClassLoader . create For ( parent Configuration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Class ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġdestroy Root Context () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . analysis Configuration . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġanalysis Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġconfiguration Ġ= ĠAnalysis Configuration . create Root ( ĊĠĠĠĠĠĠĠ ĠWh itelist . MIN IMAL , ĊĠĠĠĠĠĠĠ Ġbootstrap ClassLoader Ġ= ĠBootstrap ClassLoader ( DE TERMIN ISTIC _ RT ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġanalysis Ġcontext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcontext : ĠAnalysis Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠAnalysis Context . from Configuration ( configuration ) ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfiguration . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShort - hand Ġfor Ġan alys ing Ġand Ġvalidating Ġa Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġvalidate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Severity Level : ĠSeverity Ġ= ĠSeverity . INFORMATION AL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno inline Ġblock : Ġ( Rule Validator .( Analysis Context ) Ġ-> ĠUnit ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠClass Reader ( T :: class . java . name ) ĊĠĠĠĠĠĠĠ ĠAnalysis Configuration . create Root ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Severity Level Ġ= Ġminimum Severity Level , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap ClassLoader Ġ= ĠBootstrap ClassLoader ( DE TERMIN ISTIC _ RT ) ĊĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġanalysis Configuration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠRule Validator ( ALL _ R ULES , Ġanalysis Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠAnalysis Context . from Configuration ( analysis Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidator . analyze ( reader , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( validator , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRun Ġaction Ġon Ġa Ġseparate Ġthread Ġto Ġensure Ġthat Ġthe Ġcode Ġis Ġrun Ġoff Ġa Ġclean Ġs late . ĠThe Ġsandbox Ġcontext Ġis Ġlocal Ġto ĊĠĠĠĠ Ġ* Ġthe Ġcurrent Ġthread , Ġso Ġthis Ġallows Ġinspection Ġof Ġthe Ġcost Ġsummary Ġobject , Ġetc . Ġfrom Ġwithin Ġthe Ġprovided Ġdelegate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsandbox ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġoptions : ĠAny , ĊĠĠĠĠĠĠĠ Ġpinned Classes : ĠSet < java . lang . Class <* >> Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠ Ġminimum Severity Level : ĠSeverity Ġ= ĠSeverity . WARNING , ĊĠĠĠĠĠĠĠ Ġenable Tracing : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġaction : ĠSandbox Runtime Context . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrules Ġ= Ġmutable ListOf < Rule >() ĊĠĠĠĠĠĠĠ Ġval Ġemitter s Ġ= Ġmutable ListOf < Emitter >(). apply Ġ{ Ġadd All ( BASIC _ EM IT TER S ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdefinition Providers Ġ= Ġmutable ListOf < Definition Provider >(). apply Ġ{ Ġadd All ( BASIC _ DEFINITION _ PRO VID ERS ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclass Sources Ġ= Ġmutable ListOf < Class Source >() ĊĠĠĠĠĠĠĠ Ġvar Ġexecution Profile Ġ= ĠExecution Profile . UN LIMIT ED ĊĠĠĠĠĠĠĠ Ġvar Ġwhitelist Ġ= ĠWh itelist . MIN IMAL ĊĠĠĠĠĠĠĠ Ġfor Ġ( option Ġin Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRule Ġ-> Ġrules . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEmit ter Ġ-> Ġemitter s . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDefinition Provider Ġ-> Ġdefinition Providers . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExecution Profile Ġ-> Ġexecution Profile Ġ= Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Source Ġ-> Ġclass Sources . add ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWh itelist Ġ-> Ġwhitelist Ġ= Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrules . addAll ( option . filter Is Instance < Rule >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter s . addAll ( option . filter Is Instance < Emitter >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Providers . addAll ( option . filter Is Instance < Definition Provider >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġthrown Exception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpinned Test Classes Ġ= Ġpinned Classes . map ( Type :: get Internal Name ). toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalysis Configuration . create Root ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhitelist Ġ= Ġwhitelist , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Pin ned Classes Ġ= Ġpinned Test Classes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Severity Level Ġ= Ġminimum Severity Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap ClassLoader Ġ= ĠBootstrap ClassLoader ( DE TERMIN ISTIC _ RT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġanalysis Configuration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSandbox Runtime Context ( Sandbox Configuration . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Profile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrules . distinct By ( Any :: java Class ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter s . distinct By ( Any :: java Class ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition Providers . distinct By ( Any :: java Class ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Tracing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalysis Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( runtime Cost s ). are Zero () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrown Exception Ġ= Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. join () ĊĠĠĠĠĠĠĠ Ġthrow Ġthrown Exception Ġ?: Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparent ed Sandbox ( ĊĠĠĠĠĠĠĠ Ġminimum Severity Level : ĠSeverity Ġ= ĠSeverity . WARNING , ĊĠĠĠĠĠĠĠ Ġenable Tracing : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġaction : ĠSandbox Runtime Context . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthrown Exception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . analysis Configuration . create Child ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Minimum Severity Level Ġ= Ġminimum Severity Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġanalysis Configuration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSandbox Runtime Context ( Sandbox Configuration . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . execution Profile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . rules , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . emitter s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Configuration . definition Providers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Tracing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalysis Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent ClassLoader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ )). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( runtime Cost s ). are Zero () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrown Exception Ġ= Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. join () ĊĠĠĠĠĠĠĠ Ġthrow Ġthrown Exception Ġ?: Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġclass Ġreference Ġfrom Ġa Ġclass Ġhierarchy Ġbased Ġon Ġ[ T ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠClass Hierarchy . get () Ġ= Ġthis [ name Of < T >() ] !! ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġinstance Ġof Ġa Ġclass Ġusing Ġthe Ġsandbox Ġclass Ġloader . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠCallable > ĠSandbox Runtime Context . new Callable (): ĠLoaded Class Ġ= Ġload Class < T >() ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠSandbox Runtime Context . load Class (): ĠLoaded Class Ġ= Ġload Class ( T :: class . jvm Name ) ĊĊĠĠĠ Ġfun ĠSandbox Runtime Context . load Class ( className : ĠString ): ĠLoaded Class Ġ= Ġclass Loader . load For Sandbox ( className ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRun Ġthe Ġentry - point Ġof Ġthe Ġloaded Ġ[ Callable ] Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠLoaded Class . create And Invoke ( methodName : ĠString Ġ= Ġ" call ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= Ġtype . newInstance () ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġinstance . java Class . getMethod ( methodName ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( instance ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex . target Exception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStub Ġvisitor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġclass ĠWriter Ġ: ĠClass Writer ( COMPUTE _ FR AMES Ġor ĠCOMP UTE _ MAX S ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Class And Member Visitor . API _ VERSION , Ġapi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġprotected Ġclass ĠD JVM ( private Ġval Ġclass Loader : ĠClassLoader ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġd jvm : ĠClass < *> Ġ= Ġclass For (" sandbox . java . lang . DJ VM ") ĊĠĠĠĠĠĠĠ Ġval Ġobject Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Object ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstring Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . String ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlong Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Long ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinteger Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Integer ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġshort Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Short ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbyte Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Byte ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Character ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġboolean Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Boolean ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdouble Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Double ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfloat Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Float ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġthrowable Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . Throwable ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstack Trace Element Class : ĠClass < *> Ġby Ġlazy Ġ{ Ġclass For (" sandbox . java . lang . StackTrace Element ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclass For ( className : ĠString ): ĠClass < *> Ġ= ĠClass . forName ( className , Ġfalse , Ġclass Loader ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġsandbox ( obj : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġd jvm . getMethod (" sandbox ", ĠAny :: class . java ). invoke ( null , Ġobj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun sandbox ( obj : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġd jvm . getMethod (" uns andbox ", ĠAny :: class . java ). invoke ( null , Ġobj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstring Of ( str : ĠString ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstring Class . getMethod (" to DJ VM ", ĠString :: class . java ). invoke ( null , Ġstr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlong Of ( l : ĠLong ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlong Class . getMethod (" to DJ VM ", ĠLong :: class . java ObjectType ). invoke ( null , Ġl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġint Of ( i : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinteger Class . getMethod (" to DJ VM ", ĠInt :: class . java ObjectType ). invoke ( null , Ġi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġshort Of ( i : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġshort Class . getMethod (" to DJ VM ", ĠShort :: class . java ObjectType ). invoke ( null , Ġi . to Short ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbyte Of ( i : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbyte Class . getMethod (" to DJ VM ", ĠByte :: class . java ObjectType ). invoke ( null , Ġi . to Byte ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġchar Of ( c : ĠChar ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcharacter Class . getMethod (" to DJ VM ", ĠChar :: class . java ObjectType ). invoke ( null , Ġc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġboolean Of ( bool : ĠBoolean ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġboolean Class . getMethod (" to DJ VM ", ĠBoolean :: class . java ObjectType ). invoke ( null , Ġbool ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdouble Of ( d : ĠDouble ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdouble Class . getMethod (" to DJ VM ", ĠDouble :: class . java ObjectType ). invoke ( null , Ġd ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfloat Of ( f : ĠFloat ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfloat Class . getMethod (" to DJ VM ", ĠFloat :: class . java ObjectType ). invoke ( null , Ġf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġobject ArrayOf ( var arg Ġobjs : ĠAny ): ĠArray < in ĠAny > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" unchecked _ cast ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( java . lang . reflect . Array . newInstance ( object Class , Ġobjs . size ) Ġas ĠArray < in ĠAny >). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġobjs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ i ] Ġ= Ġobject Class . cast ( objs [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠAny . get Array ( methodName : ĠString ): ĠArray < *> Ġ= Ġjava Class . getMethod ( methodName ). invoke ( this ) Ġas ĠArray < *> Ċ } Ċ