package Ġorg . jetbrains . k annot ator . asm . util Ċ Ċ import Ġorg . jetbrains . k annot ator . declarations . Method Ċ import Ġorg . object web . asm . Class Reader Ċ import Ġorg . object web . asm . Class Visitor Ċ import Ġorg . object web . asm . Method Visitor Ċ import Ġorg . object web . asm . Op codes Ċ import Ġorg . object web . asm . Type Ċ import Ġorg . object web . asm . tree . Abstract Insn Node Ċ import Ġorg . object web . asm . tree . Label Node Ċ import Ġorg . object web . asm . tree . LineNumber Node Ċ import Ġorg . object web . asm . tree . Method Node Ċ import Ġorg . object web . asm . util . Printer Ċ import Ġorg . object web . asm . tree . Method Insn Node Ċ import Ġorg . jetbrains . k annot ator . declarations . Method Id Ċ import Ġorg . jetbrains . k annot ator . declarations . get Argument Types Ċ import Ġorg . object web . asm . Field Visitor Ċ import Ġorg . jetbrains . k annot ator . declarations . Class Member Ċ import Ġorg . jetbrains . k annot ator . declarations . ClassName Ċ import Ġorg . jetbrains . k annot ator . declarations . Field Ċ Ċ public Ġfun ĠAbstract Insn Node . to Opcode String (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLine Number Node Ġ-> Ġ" Line Ġ" Ġ+ Ġline ĊĠĠĠĠĠĠĠ Ġis ĠLabel Node Ġ-> Ġ" Label : Ġ${ getLabel () }" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopcode Ġ= Ġget Opcode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( opcode Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġopcode : Ġ" Ġ+ Ġjava Class . getSimpleName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrinter . OP CODES [ opcode ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġfun ĠType . is Primitive Or Void Type () Ġ: ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġsort Ġ= Ġthis . get Sort () ĊĠĠĠ Ġreturn Ġsort Ġ== ĠType . VOID Ġ|| Ġsort Ġ== ĠType . BOOLEAN Ġ|| Ġsort Ġ== ĠType . CHAR Ġ|| Ġsort Ġ== ĠType . BYTE Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ== ĠType . SHORT Ġ|| Ġsort Ġ== ĠType . INT Ġ|| Ġsort Ġ== ĠType . FLOAT Ġ|| Ġsort Ġ== ĠType . LONG Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ== ĠType . DOUBLE ; Ċ } Ċ Ċ public Ġfun ĠClass Reader . forEach Method ( delegate Class Visitor : ĠClass Visitor ? Ġ= Ġnull , Ġbody : Ġ( className : ĠString , Ġaccess : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġaccept ( object Ġ: ĠClass Visitor ( Op codes . ASM 4 , Ġdelegate Class Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Method ( access : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġexceptions : ĠArray < out ĠString >? ): ĠMethod Visitor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ( get ClassName (), Ġaccess , Ġname , Ġdesc , Ġsignature ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdesc , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ 0 ) Ċ } Ċ Ċ public Ġfun ĠClass Reader . forEach Field ( ĊĠĠĠĠĠĠĠ Ġdelegate Class Visitor : ĠClass Visitor ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġbody : Ġ( className : ĠString , Ġaccess : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġvalue : ĠAny ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġaccept ( object Ġ: ĠClass Visitor ( Op codes . ASM 4 , Ġdelegate Class Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġvisit Field ( access : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġvalue : ĠAny ?): ĠField Visitor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ( get ClassName (), Ġaccess , Ġname , Ġdesc , Ġsignature , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Field ( access , Ġname , Ġdesc , Ġsignature , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ 0 ) Ċ } Ċ Ċ public Ġfun ĠClass Reader . forEach Member ( ĊĠĠĠĠĠĠĠ Ġdelegate Class Visitor : ĠClass Visitor ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġbody : Ġ( Class Member ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval ĠclassName Ġ= ĠClass Name . from Internal Name ( get ClassName ()) ĊĠĠĠ Ġaccept ( object Ġ: ĠClass Visitor ( Op codes . ASM 4 , Ġdelegate Class Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġvisit Method ( access : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġexceptions : ĠArray < out ĠString >? ): ĠMethod Visitor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ( Method ( className , Ġaccess , Ġname , Ġdesc , Ġsignature )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdesc , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġvisit Field ( access : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġvalue : ĠAny ?): ĠField Visitor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ( Field ( className , Ġaccess , Ġname , Ġdesc , Ġsignature , Ġvalue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Field ( access , Ġname , Ġdesc , Ġsignature , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ 0 ) Ċ } Ċ Ċ public Ġfun ĠClass Reader . forEach Method With Method Visitor ( body : Ġ( className : ĠString , Ġaccess : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?) Ġ-> ĠMethod Visitor ?) Ġ{ ĊĠĠĠ Ġaccept ( object Ġ: ĠClass Visitor ( Op codes . ASM 4 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Method ( access : ĠInt , Ġname : ĠString , Ġdesc : ĠString , Ġsignature : ĠString ?, Ġexceptions : ĠArray < out ĠString >? ): ĠMethod Visitor ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbody ( get ClassName (), Ġaccess , Ġname , Ġdesc , Ġsignature ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ 0 ) Ċ Ċ } Ċ Ċ public Ġfun ĠMethod . create Method Node Stub (): ĠMethod Node Ġ= ĠMethod Node ( access . flags , Ġid . methodName , Ġid . method Desc , Ġgeneric Signature , Ġnull ) Ċ Ċ public Ġfun ĠMethod Insn Node . get Argument Count (): ĠInt Ġ= ĠType . get Argument Types ( desc ). size