/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠMichael ĠRo z um y ans ki y Ċ Ġ* Ċ Ġ* Ġ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 Ġio . m ichael ro cks . lights aber . processor . annotations . proxy Ċ Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . HashSet Ċ Ċ class ĠArray ClassLoader Ġ: ĠClassLoader Ġ{ ĊĠ Ġprivate Ġval Ġloaded Classes Ġ= ĠHashSet < String >() ĊĠ Ġprivate Ġval Ġpending Classes Ġ= ĠHashMap < String , ĠByteArray >() ĊĊĠ Ġconstructor () ĊĊĠ Ġconstructor ( parent ClassLoader : ĠClassLoader ) Ġ: Ġsuper ( parent ClassLoader ) ĊĊĠ Ġfun Ġadd Class ( name : ĠString , Ġbytes : ĠByteArray ) Ġ{ ĊĠĠĠ Ġcheck (! loaded Classes . contains ( name )) ĊĠĠĠ Ġpending Classes . put ( name , Ġbytes ) ĊĠ Ġ} ĊĊĠ Ġfun Ġhas Class ( name : ĠString ): ĠBoolean Ġ= Ġloaded Classes . contains ( name ) Ġ|| Ġpending Classes . containsKey ( name ) ĊĊĠ Ġ@ Throws ( Class NotFoundException :: class ) ĊĠ Ġoverride Ġfun Ġfind Class ( name : ĠString ): ĠClass < *> Ġ{ ĊĠĠĠ Ġval Ġloaded Class : ĠClass < *> ? ĊĠĠĠ Ġval Ġbytes Ġ= Ġpending Classes . remove ( name ) ĊĠĠĠ Ġif Ġ( bytes Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġloaded Class Ġ= Ġfind Loaded Class ( name ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġloaded Class Ġ= Ġdefine Class ( name , Ġbytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠ Ġloaded Classes . add ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( loaded Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġloaded Class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthrow ĠClass NotFoundException ( name ) ĊĠ Ġ} Ċ } Ċ