package Ġorg . open rs 2 . asm . transform Ċ Ċ import Ġorg . object web . asm . tree . Class Node Ċ import Ġorg . object web . asm . tree . Field Node Ċ import Ġorg . object web . asm . tree . Method Node Ċ import Ġorg . open rs 2 . asm . classpath . Class Path Ċ import Ġorg . open rs 2 . asm . classpath . Library Ċ import Ġorg . open rs 2 . asm . has Code Ċ Ċ public Ġabstract Ġclass ĠTransformer Ġ{ ĊĠĠĠ Ġpublic Ġopen Ġfun Ġtransform ( class Path : ĠClass Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpre Transform ( class Path ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġchanged : ĠBoolean ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġpre Pass ( class Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( library Ġin Ġclass Path . libraries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġlibrary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġtransform Class ( class Path , Ġlibrary , Ġclazz ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġclazz . fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġtransform Field ( class Path , Ġlibrary , Ġclazz , Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġclazz . methods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġpre Transform Method ( class Path , Ġlibrary , Ġclazz , Ġmethod ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . has Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġtransform Code ( class Path , Ġlibrary , Ġclazz , Ġmethod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġpost Transform Method ( class Path , Ġlibrary , Ġclazz , Ġmethod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġchanged Ġor Ġpost Pass ( class Path ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( changed ) ĊĊĠĠĠĠĠĠĠ Ġpost Transform ( class Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpre Transform ( class Path : ĠClass Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġempty ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpre Pass ( class Path : ĠClass Path ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġtransform Class ( class Path : ĠClass Path , Ġlibrary : ĠLibrary , Ġclazz : ĠClass Node ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġtransform Field ( ĊĠĠĠĠĠĠĠ Ġclass Path : ĠClass Path , ĊĠĠĠĠĠĠĠ Ġlibrary : ĠLibrary , ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass Node , ĊĠĠĠĠĠĠĠ Ġfield : ĠField Node ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpre Transform Method ( ĊĠĠĠĠĠĠĠ Ġclass Path : ĠClass Path , ĊĠĠĠĠĠĠĠ Ġlibrary : ĠLibrary , ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass Node , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod Node ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġtransform Code ( ĊĠĠĠĠĠĠĠ Ġclass Path : ĠClass Path , ĊĠĠĠĠĠĠĠ Ġlibrary : ĠLibrary , ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass Node , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod Node ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Transform Method ( ĊĠĠĠĠĠĠĠ Ġclass Path : ĠClass Path , ĊĠĠĠĠĠĠĠ Ġlibrary : ĠLibrary , ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass Node , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod Node ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Pass ( class Path : ĠClass Path ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġpost Transform ( class Path : ĠClass Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġempty ĊĠĠĠ Ġ} Ċ } Ċ