package Ġcom . did ig lobal . boost er . transform . util Ċ Ċ import Ġcom . did ig lobal . boost er . transform . Abstract Transform Context Ċ import Ġcom . did ig lobal . boost er . transform . Transform Context Ċ import Ġcom . did ig lobal . boost er . transform . Transformer Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URL ClassLoader Ċ Ċ class ĠTransformer ClassLoader Ġ: ĠURL ClassLoader Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtransformer : ĠTransformer ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate : ĠURL ClassLoader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory : Ġ( ClassLoader ) Ġ-> ĠTransformer ĊĠĠĠ Ġ) Ġ: Ġsuper ( delegate . ur Ls ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . transformer Ġ= Ġfactory ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate : ĠURL ClassLoader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory : Ġ( ClassLoader , ĠIterable < Transformer >) Ġ-> ĠTransformer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġtransformer : ĠTransformer ĊĠĠĠ Ġ) Ġ: Ġsuper ( delegate . ur Ls ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . transformer Ġ= Ġfactory ( this , Ġtransformer . as Iterable ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclasspath : ĠCollection < File > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ur Ls . map Ġ{ ĠFile ( it . path ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcontext : ĠTransform Context Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠAbstract Transform Context ( java Class . name , Ġjava Class . name , Ġclasspath , Ġclasspath ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Class ( name : ĠString ): ĠClass < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytecode Ġ= Ġtransformer . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Pre Transform ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetResource AsStream ("${ name . replace ('.', Ġ'/') }. class ") ?. use ( InputStream :: read Bytes )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform ( context , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIOException (" Read Ġclass Ġ$ name Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Transform ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdefine Class ( name , Ġbytecode , Ġ 0 , Ġbytecode . size ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ