package Ġme . x tr m . un lok . accessor Ċ Ċ import Ġme . x tr m . un lok . Un lok Ċ import Ġnet . g ud en au . lib . unsafe . Unsafe Ċ import Ġorg . object web . asm . Class Writer Ċ import Ġorg . object web . asm . tree . Class Node Ċ import Ġjava . nio . file . Files Ċ Ċ /** Ċ Ġ* ĠA Ġ[ ClassLoader ] Ġcorresponding Ġto ĠUn lok Ġaccessors . Ċ Ġ* Ċ Ġ* Ġ@ author Ġx tr m Ċ Ġ* Ġ@ since Ġ 0 . 0 . 1 Ċ Ġ*/ Ċ internal Ġobject ĠAccess or ClassLoader Ġ: ĠClassLoader ( Un lok :: class . java . class Loader ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdo Debug Dump Ġ= Ġjava . lang . Boolean . getBoolean (" un lok . debug . dump ") ĊĊĠĠĠ Ġprivate Ġval Ġdump Path Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFiles . create Temp Directory ( Accessor Builder . UN LO K _ BASE _ PACKAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoads Ġa Ġclass Ġby Ġthe Ġclass Ġname Ġand Ġthe Ġbytecode . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclass Node ĠThe Ġclass Ġnode ĊĠĠĠĠ Ġ* Ġ@ param Ġcw Flags ĠThe Ġ[ Class Writer ] Ġflags ĊĠĠĠĠ Ġ* Ġ@ param Ġdelegate ĠW he ather Ġor Ġnot Ġthe Ġclass loader Ġshould Ġdelegate Ġclass Ġdefinition Ġto Ġ[ Unsafe ] Ġinstead ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġdefined Ġclass . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ ClassLoader . define Class ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload ( ĊĠĠĠĠĠĠĠ Ġclass Node : ĠClass Node , ĊĠĠĠĠĠĠĠ Ġcw Flags : ĠInt Ġ= ĠClass Writer . COMPUTE _ FR AMES , ĊĠĠĠĠĠĠĠ Ġdelegate : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġclass Node . name ĊĠĠĠĠĠĠĠ Ġval Ġbytecode Ġ= ĠClass Writer ( cw Flags ). also ( class Node :: accept ). toByteArray () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( do Debug Dump ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Target Ġ= Ġdump Path . resolve ("$ className . class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Target . parent . to File (). mkdir s () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( class Target , Ġbytecode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnormalized ClassName Ġ= ĠclassName . replace ('/', Ġ'.') ĊĊĠĠĠĠĠĠĠ Ġif Ġ( delegate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUnsafe . define Class < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormalized ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . define Class ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormalized ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ