Package javassist.bytecode
Class CodeAttribute
java.lang.Object
javassist.bytecode.AttributeInfo
javassist.bytecode.CodeAttribute
- All Implemented Interfaces:
Opcode
Code_attribute.
To browse the code field of
a Code_attribute structure,
use CodeIterator.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static classstatic classAn exception that may be thrown bycopy()inCodeAttribute. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate List<AttributeInfo>private ExceptionTableprivate intprivate intstatic final StringThe name of this attribute"Code".Fields inherited from class javassist.bytecode.AttributeInfo
constPool, info, nameFields inherited from interface javassist.bytecode.Opcode
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, INVOKEDYNAMIC, 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, RET, RETURN, SALOAD, SASTORE, SIPUSH, STACK_GROW, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, WIDE -
Constructor Summary
ConstructorsModifierConstructorDescriptionCodeAttribute(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable) Constructs aCode_attribute.(package private)CodeAttribute(ConstPool cp, int name_id, DataInputStream in) privateCodeAttribute(ConstPool cp, CodeAttribute src, Map<String, String> classnames) Constructs a copy ofCode_attribute. -
Method Summary
Modifier and TypeMethodDescriptionintComputes the maximum stack size and setsmax_stackto the computed size.Makes a copy.private static CodeAttribute.LdcEntrycopyCode(byte[] code, int beginPos, int endPos, ConstPool srcCp, byte[] newcode, ConstPool destCp, Map<String, String> classnameMap) private byte[]copyCode(ConstPool destCp, Map<String, String> classnames, ExceptionTable etable, CodeAttribute destCa) Copies code.private static voidcopyConstPoolInfo(int i, byte[] code, ConstPool srcCp, byte[] newcode, ConstPool destCp, Map<String, String> classnameMap) byte[]get()This method is not available.getAttribute(String name) Returns the attribute with the specified name.Returnsattributes[].byte[]getCode()Returnscode[].intReturnscode_length.Returns the name of the class declaring the method including this code attribute.Returnsexception_table[].intReturnsmax_locals.intReturnsmax_stack.(package private) voidgetRefClasses(Map<String, String> classnames) voidinsertLocalVar(int where, int size) Changes the index numbers of the local variables to append a new parameter.iterator()Makes a new iterator for reading this code attribute.intlength()Returns the length of thisattribute_infostructure.(package private) voidrenameClass(String oldname, String newname) (package private) voidrenameClass(Map<String, String> classnames) voidset(byte[] newinfo) This method is not available.voidsetAttribute(StackMap sm) Adds a stack map table for J2ME (CLDC).voidAdds a stack map table.(package private) voidsetCode(byte[] newinfo) Setscode[].voidsetMaxLocals(int value) Setsmax_locals.voidsetMaxStack(int value) Setsmax_stack.private static voidshiftIndex(CodeIterator ci, int lessThan, int delta) private static voidshiftIndex0(CodeIterator ci, int index, int opcode, int lessThan, int delta, int opcode_i_0, int opcode_i) private static voidshiftIndex8(CodeIterator ci, int index, int opcode, int lessThan, int delta) (package private) voidwrite(DataOutputStream out) Methods inherited from class javassist.bytecode.AttributeInfo
copyAll, getConstPool, getLength, getName, getRefClasses, lookup, read, remove, renameClass, renameClass, writeAll
-
Field Details
-
tag
The name of this attribute"Code".- See Also:
-
maxStack
private int maxStack -
maxLocals
private int maxLocals -
exceptions
-
attributes
-
-
Constructor Details
-
CodeAttribute
Constructs aCode_attribute.- Parameters:
cp- constant pool tablestack-max_stacklocals-max_localscode-code[]etable-exception_table[]
-
CodeAttribute
private CodeAttribute(ConstPool cp, CodeAttribute src, Map<String, String> classnames) throws BadBytecodeConstructs a copy ofCode_attribute. Specified class names are replaced during the copy.- Parameters:
cp- constant pool table.src- source Code attribute.classnames- pairs of replaced and substituted class names.- Throws:
BadBytecode
-
CodeAttribute
CodeAttribute(ConstPool cp, int name_id, DataInputStream in) throws IOException - Throws:
IOException
-
-
Method Details
-
copy
public AttributeInfo copy(ConstPool newCp, Map<String, String> classnames) throws CodeAttribute.RuntimeCopyExceptionMakes a copy. Class names are replaced according to the givenMapobject.- Overrides:
copyin classAttributeInfo- Parameters:
newCp- the constant pool table used by the new copy.classnames- pairs of replaced and substituted class names.- Returns:
CodeAttributeobject.- Throws:
CodeAttribute.RuntimeCopyException- if aBadBytecodeexception is thrown, it is converted intoRuntimeCopyException.
-
length
public int length()Returns the length of thisattribute_infostructure. The returned value isattribute_length + 6.- Overrides:
lengthin classAttributeInfo
-
write
- Overrides:
writein classAttributeInfo- Throws:
IOException
-
get
public byte[] get()This method is not available.- Overrides:
getin classAttributeInfo- Throws:
UnsupportedOperationException- always thrown.
-
set
public void set(byte[] newinfo) This method is not available.- Overrides:
setin classAttributeInfo- Throws:
UnsupportedOperationException- always thrown.
-
renameClass
- Overrides:
renameClassin classAttributeInfo
-
renameClass
- Overrides:
renameClassin classAttributeInfo
-
getRefClasses
- Overrides:
getRefClassesin classAttributeInfo
-
getDeclaringClass
Returns the name of the class declaring the method including this code attribute. -
getMaxStack
public int getMaxStack()Returnsmax_stack. -
setMaxStack
public void setMaxStack(int value) Setsmax_stack. -
computeMaxStack
Computes the maximum stack size and setsmax_stackto the computed size.- Returns:
- the newly computed value of
max_stack - Throws:
BadBytecode- if this method fails in computing.
-
getMaxLocals
public int getMaxLocals()Returnsmax_locals. -
setMaxLocals
public void setMaxLocals(int value) Setsmax_locals. -
getCodeLength
public int getCodeLength()Returnscode_length. -
getCode
public byte[] getCode()Returnscode[]. -
setCode
void setCode(byte[] newinfo) Setscode[]. -
iterator
Makes a new iterator for reading this code attribute. -
getExceptionTable
Returnsexception_table[]. -
getAttributes
Returnsattributes[]. It returns a list ofAttributeInfo. A new element can be added to the returned list and an existing element can be removed from the list.- See Also:
-
getAttribute
Returns the attribute with the specified name. If it is not found, this method returns null.- Parameters:
name- attribute name- Returns:
- an
AttributeInfoobject or null.
-
setAttribute
Adds a stack map table. If another copy of stack map table is already contained, the old one is removed.- Parameters:
smt- the stack map table added to this code attribute. If it is null, a new stack map is not added. Only the old stack map is removed.
-
setAttribute
Adds a stack map table for J2ME (CLDC). If another copy of stack map table is already contained, the old one is removed.- Parameters:
sm- the stack map table added to this code attribute. If it is null, a new stack map is not added. Only the old stack map is removed.- Since:
- 3.12
-
copyCode
private byte[] copyCode(ConstPool destCp, Map<String, String> classnames, ExceptionTable etable, CodeAttribute destCa) throws BadBytecodeCopies code.- Throws:
BadBytecode
-
copyCode
private static CodeAttribute.LdcEntry copyCode(byte[] code, int beginPos, int endPos, ConstPool srcCp, byte[] newcode, ConstPool destCp, Map<String, String> classnameMap) throws BadBytecode- Throws:
BadBytecode
-
copyConstPoolInfo
-
insertLocalVar
Changes the index numbers of the local variables to append a new parameter. This method does not updateLocalVariableAttribute,LocalVariableTypeAttribute,StackMapTable, orStackMap. These attributes must be explicitly updated.- Parameters:
where- the index of the new parameter.size- the type size of the new parameter (1 or 2).- Throws:
BadBytecode- See Also:
-
shiftIndex
- Parameters:
lessThan- If the index of the local variable is less than this value, it does not change. Otherwise, the index is increased.delta- the indexes of the local variables are increased by this value.- Throws:
BadBytecode
-
shiftIndex8
private static void shiftIndex8(CodeIterator ci, int index, int opcode, int lessThan, int delta) throws BadBytecode - Throws:
BadBytecode
-
shiftIndex0
private static void shiftIndex0(CodeIterator ci, int index, int opcode, int lessThan, int delta, int opcode_i_0, int opcode_i) throws BadBytecode - Throws:
BadBytecode
-