public class CodeEnhancer extends CodeVisitor
_codeAttr, _offset, AALOAD, AASTORE, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETSTATIC, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, IUSHR, IXOR, JSR, JSR_W, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_W, LDC2_W, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RESERVED_0, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, TABLESWITCH, WIDE
Constructor and Description |
---|
CodeEnhancer() |
CodeEnhancer(JavaClass javaClass,
CodeAttribute code) |
Modifier and Type | Method and Description |
---|---|
void |
add(int offset,
byte[] buffer,
int bufOffset,
int length)
Adds a byte to the code.
|
void |
addByte(int offset,
int value)
Adds a byte to the code.
|
void |
addNulls(int offset,
int count)
Adds a byte to the code.
|
void |
addShort(int offset,
int value)
Adds a short to the code.
|
void |
analyze(Analyzer analyzer,
boolean allowFlow)
Analyzes the code for a method
|
protected void |
analyzeJumps() |
byte[] |
getCode()
Returns the code buffer.
|
int |
getLength()
Returns the length.
|
void |
init(JavaClass javaClass,
CodeAttribute codeAttr) |
protected void |
insertCode(int offset,
int count)
Updates indices when adding a chunk of code.
|
void |
remove(int offset,
int count)
Removes a range from the code.
|
protected void |
removeCode(int offset,
int count) |
void |
setByte(int offset,
int value)
Adds a byte to the code.
|
void |
update()
Updates the code.
|
analyze, analyzeImpl, getBranchTarget, getByte, getByteArg, getByteArg, getCodeAttribute, getConstantArg, getExceptions, getInt, getIntArg, getJavaClass, getOffset, getOpcode, getShort, getShortArg, getShortArg, getSwitchTargets, isBranch, isSwitch, next, nextOffset, setByteArg, setInt, setOffset, setShort, setShortArg
public CodeEnhancer()
public CodeEnhancer(JavaClass javaClass, CodeAttribute code)
public void init(JavaClass javaClass, CodeAttribute codeAttr)
init
in class CodeVisitor
public void analyze(Analyzer analyzer, boolean allowFlow) throws java.lang.Exception
analyze
in class CodeVisitor
java.lang.Exception
public byte[] getCode()
getCode
in class CodeVisitor
public int getLength()
public void addByte(int offset, int value)
public void setByte(int offset, int value)
public void addShort(int offset, int value)
public void add(int offset, byte[] buffer, int bufOffset, int length)
public void remove(int offset, int count)
public void addNulls(int offset, int count)
protected void insertCode(int offset, int count)
protected void removeCode(int offset, int count)
protected void analyzeJumps()
public void update()