package Ġcom . did ich ux ing . d ora emon kit . plugin Ċ Ċ import Ġcom . android . build . api . transform . Context Ċ import Ġcom . android . build . api . transform . Directory Input Ċ import Ġcom . android . build . api . transform . Format Ċ import Ġcom . android . build . api . transform . Jar Input Ċ import Ġcom . android . build . api . transform . Qualified Content Ċ import Ġcom . android . build . api . transform . Secondary Input Ċ import Ġcom . android . build . api . transform . Status . AD DED Ċ import Ġcom . android . build . api . transform . Status . CHANGED Ċ import Ġcom . android . build . api . transform . Status . NOT CHANGED Ċ import Ġcom . android . build . api . transform . Status . RE MOVED Ċ import Ġcom . android . build . api . transform . Transform Input Ċ import Ġcom . android . build . api . transform . Transform Invocation Ċ import Ġcom . android . build . api . transform . Transform Output Provider Ċ import Ġcom . did ich ux ing . d ora emon kit . plugin . transform . Do Kit Base Transform Ċ import Ġcom . did ig lobal . boost er . gradle .* Ċ import Ġcom . did ig lobal . boost er . kotlin x . N CPU Ċ import Ġcom . did ig lobal . boost er . transform . Abstract K lass Pool Ċ import Ġcom . did ig lobal . boost er . transform . Artifact Manager Ċ import Ġcom . did ig lobal . boost er . transform . Transform Context Ċ import Ġcom . did ig lobal . boost er . transform . artifacts Ċ import Ġcom . did ig lobal . boost er . transform . util . transform Ċ import Ġjava . io . File Ċ import Ġjava . net . URI Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġdelegate Ġof ĠTransform Invocation Ċ Ġ* Ċ Ġ* Ġ@ author Ġj ohn son lee Ċ Ġ*/ Ċ internal Ġclass ĠDo Kit Transform Invocation ( private Ġval Ġdelegate : ĠTransform Invocation , Ġinternal Ġval Ġtransform : ĠDo Kit Base Transform ) Ġ: ĠTransform Invocation , ĠTransform Context , ĠArtifact Manager Ġ Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Work Ste aling Pool ( N CPU ) ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġdelegate . context . variant Name ĊĊĠĠĠ Ġoverride Ġval Ġproject Dir : ĠFile Ġ= Ġdelegate . project . project Dir ĊĊĠĠĠ Ġoverride Ġval Ġbuild Dir : ĠFile Ġ= Ġdelegate . project . build Dir ĊĊĠĠĠ Ġoverride Ġval Ġtemporary Dir : ĠFile Ġ= Ġdelegate . context . temporary Dir ĊĊĠĠĠ Ġoverride Ġval Ġreports Dir : ĠFile Ġ= ĠFile ( build Dir , Ġ" reports "). also Ġ{ Ġit . mkdir s () Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġboot Classpath Ġ= Ġdelegate . boot Classpath ĊĊĠĠĠ Ġoverride Ġval Ġcompile Classpath Ġ= Ġdelegate . compile Classpath ĊĊĠĠĠ Ġoverride Ġval Ġruntime Classpath Ġ= Ġdelegate . runtime Classpath ĊĊĠĠĠ Ġoverride Ġval Ġartifacts Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġval Ġklass Pool : ĠAbstract K lass Pool Ġ= Ġobject Ġ: ĠAbstract K lass Pool ( compile Classpath , Ġtransform . boot K lass Pool ) Ġ{} ĊĊĠĠĠ Ġoverride Ġval Ġapplication Id Ġ= Ġdelegate . application Id ĊĊĠĠĠ Ġoverride Ġval Ġoriginal Application Id Ġ= Ġdelegate . original Application Id ĊĊĠĠĠ Ġoverride Ġval Ġis Debug gable Ġ= Ġvariant . build Type . isDebug gable ĊĊĠĠĠ Ġoverride Ġval Ġis Data Binding Enabled Ġ= Ġdelegate . is Data Binding Enabled ĊĊĠĠĠ Ġoverride Ġfun Ġhas Property ( name : ĠString ) Ġ= Ġproject . has Property ( name ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T > ĠgetProperty ( name : ĠString , Ġdefault : ĠT ): ĠT Ġ= Ġproject . properties [ name ] Ġas ? ĠT Ġ?: Ġdefault ĊĊĠĠĠ Ġoverride Ġfun Ġget Inputs (): ĠMutable Collection < Transform Input > Ġ= Ġdelegate . inputs ĊĊĠĠĠ Ġoverride Ġfun Ġget Secondary Inputs (): ĠMutable Collection < Secondary Input > Ġ= Ġdelegate . secondary Inputs ĊĊĠĠĠ Ġoverride Ġfun Ġget Referenced Inputs (): ĠMutable Collection < Transform Input > Ġ= Ġdelegate . referenced Inputs ĊĊĠĠĠ Ġoverride Ġfun Ġis Incremental () Ġ= Ġdelegate . is Incremental ĊĊĠĠĠ Ġoverride Ġfun Ġget Output Provider (): ĠTransform Output Provider ? Ġ= Ġdelegate . output Provider ĊĊĠĠĠ Ġoverride Ġfun ĠgetContext (): ĠContext Ġ= Ġdelegate . context ĊĊĠĠĠ Ġoverride Ġfun Ġget ( type : ĠString ) Ġ= Ġvariant . artifacts . get ( type ) ĊĊĠĠĠ Ġinternal Ġfun Ġdo Full Transform () Ġ= Ġdo Transform ( this :: transform Fully ) ĊĊĠĠĠ Ġinternal Ġfun Ġdo Incremental Transform () Ġ= Ġdo Transform ( this :: transform Increment ally ) ĊĊĠĠĠ Ġprivate Ġval Ġtasks Ġ= Ġmutable ListOf < Future <* >>() ĊĊĠĠĠ Ġprivate Ġfun Ġon Pre Transform () Ġ{ ĊĠĠĠĠĠĠĠ Ġtransform . transformers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Pre Transform ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Post Transform () Ġ{ ĊĠĠĠĠĠĠĠ Ġtasks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransform . transformers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Post Transform ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Transform ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Pre Transform () ĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġthis . on Post Transform () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Fully () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inputs . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . jar Inputs Ġ+ Ġit . directory Inputs ĊĠĠĠĠĠĠĠ Ġ}. flatten (). forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġexecutor . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġif Ġ( input Ġis ĠDirectory Input ) ĠFormat . DIRECTORY Ġelse ĠFormat . JAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Provider ?. let Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Transform ing Ġ${ input . file }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . transform ( provider . getContent Location ( input . name , Ġinput . content Types , Ġinput . scopes , Ġformat ), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransform Increment ally () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inputs . parallel Stream (). forEach Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . jar Inputs . parallel Stream (). filter Ġ{ Ġit . status Ġ!= ĠNOT CHANGED Ġ}. forEach Ġ{ Ġjar Input Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġexecutor . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Incremental Transform ( jar Input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . directory Inputs . parallel Stream (). filter Ġ{ Ġit . changed Files . isNotEmpty () Ġ}. forEach Ġ{ Ġdir Input Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġdir Input . file . to URI () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġexecutor . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Incremental Transform ( dir Input , Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" NON _ EX HA UST IVE _ WHEN ") ĊĠĠĠ Ġprivate Ġfun Ġdo Incremental Transform ( jar Input : ĠJar Input ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( jar Input . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRE MOVED Ġ-> Ġjar Input . file . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCH ANG ED , ĠAD DED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Transform ing Ġ${ jar Input . file }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Provider ?. let Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjar Input . transform ( provider . getContent Location ( jar Input . name , Ġjar Input . content Types , Ġjar Input . scopes , ĠFormat . JAR ), Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" NON _ EX HA UST IVE _ WHEN ") ĊĠĠĠ Ġprivate Ġfun Ġdo Incremental Transform ( dir Input : ĠDirectory Input , Ġbase : ĠURI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdir Input . changed Files . forEach Ġ{ Ġ( file , Ġstatus ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE MOVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Deleting Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Provider ?. let Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . getContent Location ( dir Input . name , Ġdir Input . content Types , Ġdir Input . scopes , ĠFormat . DIRECTORY ). parent File . list Files ()?. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . isDirectory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠFile ( it , Ġdir Input . file . to URI (). rel ativ ize ( file . to URI ()). path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAD DED , ĠCH ANG ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . logger . info (" Transform ing Ġ$ file ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Provider ?. let Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġprovider . getContent Location ( dir Input . name , Ġdir Input . content Types , Ġdir Input . scopes , ĠFormat . DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFile ( root , Ġbase . rel ativ ize ( file . to URI ()). path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . transform ( output ) Ġ{ Ġbytecode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytecode . transform ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠByteArray . transform ( invocation : ĠDo Kit Transform Invocation ): ĠByteArray Ġ{ ĊĠĠĠ Ġreturn Ġinvocation . transform . transformers . fold ( this ) Ġ{ Ġbytes , Ġtransformer Ġ-> ĊĠĠĠĠĠĠĠ Ġtransformer . transform ( invocation , Ġbytes ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠQual ified Content . transform ( output : ĠFile , Ġinvocation : ĠDo Kit Transform Invocation ) Ġ{ ĊĠĠĠ Ġthis . file . transform ( output ) Ġ{ Ġbytecode Ġ-> ĊĠĠĠĠĠĠĠ Ġbytecode . transform ( invocation ) ĊĠĠĠ Ġ} Ċ }