package Ġorg . jetbrains . research . k ex . asm . analysis Ċ Ċ import Ġorg . jetbrains . research . k ex . asm . transform . Trace Instrument er Ċ import Ġorg . jetbrains . research . k ex . config . k ex Config Ċ import Ġorg . jetbrains . research . k ex . trace . runner . Random Runner Ċ import Ġorg . jetbrains . research . k ex . util . log Ċ import Ġorg . jetbrains . research . k fg . Class Manager Ċ import Ġorg . jetbrains . research . k fg . ir . Method Ċ import Ġorg . jetbrains . research . k fg . util . write Class Ċ import Ġorg . jetbrains . research . k fg . visitor . Method Visitor Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ Ċ class ĠRandom Checker ( override Ġval Ġcm : ĠClass Manager , Ġprivate Ġval Ġloader : ĠClassLoader , Ġprivate Ġval Ġtarget : ĠFile ) Ġ: ĊĠĠĠĠĠĠĠ ĠMethod Visitor Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrunner Ġ= Ġk ex Config . getBoolean Value (" random - runner ", Ġ" enabled ", Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġcleanup () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit ( method : ĠMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit ( method ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! runner ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġ` class ` Ġ= Ġmethod .` class ` ĊĠĠĠĠĠĠĠ Ġval Ġclass FileName Ġ= Ġ"${ target . canonical Path }/${ ` class `. fullname }. class " ĊĠĠĠĠĠĠĠ Ġif Ġ( method . is Abstract Ġ|| Ġmethod . is Constructor ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! method . is Impact able ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġtrace Instructions Ġ= ĠTrace Instrument er ( cm ). invoke ( method ) ĊĠĠĠĠĠĠĠ Ġwrite Class ( cm , Ġloader , Ġ` class `, Ġclass FileName ) ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠURL ClassLoader ( array Of ( target . to URI (). to URL ())) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Runner ( method , Ġdirectory ). run () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Could Ġnot Ġload Ġclasses Ġfor Ġrandom Ġtester : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtrace Instructions . forEach Ġ{ Ġit . parent ?. remove ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġwrite Class ( cm , Ġloader , Ġ` class `, Ġclass FileName ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ