/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠCent ury Link , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . cent ury link . md w . kotlin Ċ Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . Jvm ClassName Ċ import Ġorg . jetbrains . org . object web . asm . Class Reader Ċ import Ġorg . jetbrains . org . object web . asm . util . Trace Class Visitor Ċ Ċ import Ġjava . io . PrintWriter Ċ Ċ class ĠScript ClassLoader ( parent : ĠClassLoader ) Ġ: ĠClassLoader ( parent ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclasses Ġ= Ġmutable Map Of < Jvm ClassName , ĠByteArray >() ĊĊĠĠĠ Ġ@ Throws ( Class NotFoundException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġfind Class ( name : ĠString ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Bytes Ġ= Ġclasses [ Jvm ClassName . by Fq Name Without Inner Classes ( name )] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( class Bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefine Class ( name , Ġclass Bytes , Ġ 0 , Ġclass Bytes . size ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . find Class ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Class ( className : ĠJ vm ClassName , Ġbytes : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Bytes Ġ= Ġclasses . put ( className , Ġbytes ) ĊĠĠĠĠĠĠĠ Ġif Ġ( old Bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Rewrite Ġat Ġkey Ġ$ className ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdump Classes ( writer : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( class Bytes Ġin Ġclasses . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass Reader ( class Bytes ). accept ( Trace Class Visitor ( writer ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ