package Ġcom . mars . infra . hack er . gradle . plugin . visitor . thread Ċ Ċ import Ġorg . object web . asm . Class Visitor Ċ import Ġorg . object web . asm . Method Visitor Ċ import Ġorg . object web . asm . Op codes Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠJ oh nn y S word Man Ġon Ġ 2 / 3 / 2 2 Ċ Ġ*/ Ċ class ĠClass Thread Opt Visitor ( ĊĠĠĠ Ġapi : ĠInt , ĊĠĠĠ Ġclass Visitor : ĠClass Visitor , ĊĠĠĠ Ġprivate Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġprivate Ġval Ġmethod Desc : ĠString Ċ ) Ġ: ĠClass Visitor ( api , Ġclass Visitor ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Method ( ĊĠĠĠĠĠĠĠ Ġaccess : ĠInt , ĊĠĠĠĠĠĠĠ Ġname : ĠString ?, ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsignature : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexceptions : ĠArray < out ĠString >? ĊĠĠĠ Ġ): ĠMethod Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmv Ġ= Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġif Ġ( name . equals ( methodName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmv Ġ= ĠModify Thread Adapter ( api , Ġmv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmv ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠModify Thread Adapter ( api : ĠInt , Ġmethod Visitor : ĠMethod Visitor ): ĠMethod Visitor ( api , Ġmethod Visitor ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Method Insn ( ĊĠĠĠĠĠĠĠ Ġopcode : ĠInt , ĊĠĠĠĠĠĠĠ Ġowner : ĠString ?, ĊĠĠĠĠĠĠĠ Ġname : ĠString ?, ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠString ?, ĊĠĠĠĠĠĠĠ Ġis Interface : ĠBoolean ĊĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln (" opcode Ġ= Ġ$ opcode , Ġowner Ġ= Ġ$ owner , Ġname Ġ= Ġ$ name , Ġdescriptor Ġ= Ġ$ descriptor ") ĊĠĠĠĠĠĠĠ Ġvar Ġm New Op codes Ġ= Ġopcode ĊĠĠĠĠĠĠĠ Ġvar Ġm New Owner Ġ= Ġowner ĊĠĠĠĠĠĠĠ Ġvar Ġm New Name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġvar Ġm New Descriptor Ġ= Ġdescriptor ĊĠĠĠĠĠĠĠ Ġvar Ġm Is Interface Ġ= Ġis Interface ĊĊĠĠĠĠĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . INV OK ES PE CIAL Ġ&& Ġowner Ġ== Ġ" java / lang / Thread " Ġ&& Ġname Ġ== Ġ"< init >") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm New Owner Ġ= Ġ" thread / Shadow Thread " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm New Descriptor Ġ= Ġ"( Ljava / lang / Runnable ; Ljava / lang / String ;) V " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit L dc Insn (" Shadow Thread ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( opcode Ġ== ĠOp codes . IN VOKE VIRTUAL Ġ&& Ġowner Ġ== Ġ" java / lang / Thread " Ġ&& Ġname Ġ== Ġ" start " Ġ&& Ġdescriptor Ġ== Ġ" () V ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm New Owner Ġ= Ġ" thread / Shadow Thread " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . visit Method Insn ( m New Op codes , Ġm New Owner , Ġm New Name , Ġm New Descriptor , Ġm Is Interface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Type Insn ( opcode : ĠInt , Ġtype : ĠString ?) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprintln (" opcode Ġ= Ġ$ opcode , Ġtype Ġ= Ġ$ type ") ĊĠĠĠĠĠĠĠ Ġvar Ġm New Op codes Ġ= Ġopcode ĊĠĠĠĠĠĠĠ Ġvar Ġm New Type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . NEW Ġ&& Ġtype Ġ== Ġ" java / lang / Thread ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm New Type Ġ= Ġ" thread / Shadow Thread " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . visit Type Insn ( m New Op codes , Ġm New Type ) ĊĠĠĠ Ġ} Ċ }