package Ġcom . an ata wa 1 2 . j asm . plugins . gradle Ċ Ċ import Ġcom . an ata wa 1 2 . j asm . assemble J asm File Ċ import Ġcom . an ata wa 1 2 . j asm . assembler . Assembler Options Ċ import Ġcom . an ata wa 1 2 . j asm . parse J asm File Ċ import Ġcom . an ata wa 1 2 . j asm . verify File Ċ import Ġorg . apache . groovy . json . internal . Exceptions Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . tasks .* Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ open Ġclass ĠCompile J asm Task Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġlateinit Ġvar Ġextension : ĠJ asm Source Set Extension ĊĊĠĠĠ Ġ@ get : Output Directory Ġval Ġdir Ġget () Ġ= Ġextension . j asm . output Dir ĊĠĠĠ Ġ@ get : Input Files Ġval Ġfiles Ġget () Ġ= Ġextension . j asm ĊĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġvar Ġhad Error Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġcompile () Ġ{ ĊĠĠĠĠĠĠĠ Ġextension . j asm . output Dir . delete Re cursively () ĊĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġextension . j asm ĊĠĠĠĠĠĠĠ Ġval Ġpool Ġ= ĠExec utors . new Fixed ThreadPool ( Runtime . get Runtime (). available Processors ()) ĊĠĠĠĠĠĠĠ Ġhad Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= Ġfiles . output Dir ĊĊĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= ĠCollections . synchronized List ( mutable ListOf < Exception >()) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! compile File ( file , Ġoutput Dir )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhad Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . add ( RuntimeException (" comp iling Ġ$ file ", Ġe )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpool . shutdown () ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! pool . await Termination ( Long . MAX _ VALUE , ĠTimeUnit . DAYS )) {} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( errors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( error Ġin Ġerrors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" some Ġerrors Ġhas Ġoccurred ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( had Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" some Ġcompile Ġerror Ġhas Ġoccurred ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompile File ( file : ĠFile , Ġoutput Dir : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġfile . read Text () ĊĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġfile . path ĊĠĠĠĠĠĠĠ Ġval Ġj asm File Ġ= Ġparse J asm File ( fileName , Ġcontent ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠAs sembler Options . parse ( j asm File . header ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! verify File ( fileName , Ġj asm File , Ġoptions )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġclass File Ġ= Ġassemble J asm File ( fileName , Ġj asm File , Ġoptions ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclass Internal Name Ġ= Ġj asm File . class Header . className . internal Name ĊĊĠĠĠĠĠĠĠ Ġoutput Dir . resolve ("$ class Internal Name . class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġparent File . mkdir s () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Bytes ( class File ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ