Package javassist.bytecode
Class CodeAttribute
- java.lang.Object
-
- javassist.bytecode.AttributeInfo
-
- javassist.bytecode.CodeAttribute
-
- All Implemented Interfaces:
Opcode
public class CodeAttribute extends AttributeInfo implements Opcode
Code_attribute.To browse the
codefield of aCode_attributestructure, useCodeIterator.- See Also:
CodeIterator,iterator()
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classCodeAttribute.LdcEntrystatic classCodeAttribute.RuntimeCopyExceptionAn exception that may be thrown bycopy()inCodeAttribute.
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<AttributeInfo>attributesprivate ExceptionTableexceptionsprivate intmaxLocalsprivate intmaxStackstatic java.lang.StringtagThe name of this attribute"Code".-
Fields inherited from class javassist.bytecode.AttributeInfo
constPool, info, name
-
Fields 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
Constructors Modifier Constructor Description CodeAttribute(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable)Constructs aCode_attribute.(package private)CodeAttribute(ConstPool cp, int name_id, java.io.DataInputStream in)privateCodeAttribute(ConstPool cp, CodeAttribute src, java.util.Map<java.lang.String,java.lang.String> classnames)Constructs a copy ofCode_attribute.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intcomputeMaxStack()Computes the maximum stack size and setsmax_stackto the computed size.AttributeInfocopy(ConstPool newCp, java.util.Map<java.lang.String,java.lang.String> classnames)Makes a copy.private static CodeAttribute.LdcEntrycopyCode(byte[] code, int beginPos, int endPos, ConstPool srcCp, byte[] newcode, ConstPool destCp, java.util.Map<java.lang.String,java.lang.String> classnameMap)private byte[]copyCode(ConstPool destCp, java.util.Map<java.lang.String,java.lang.String> classnames, ExceptionTable etable, CodeAttribute destCa)Copies code.private static voidcopyConstPoolInfo(int i, byte[] code, ConstPool srcCp, byte[] newcode, ConstPool destCp, java.util.Map<java.lang.String,java.lang.String> classnameMap)byte[]get()This method is not available.AttributeInfogetAttribute(java.lang.String name)Returns the attribute with the specified name.java.util.List<AttributeInfo>getAttributes()Returnsattributes[].byte[]getCode()Returnscode[].intgetCodeLength()Returnscode_length.java.lang.StringgetDeclaringClass()Returns the name of the class declaring the method including this code attribute.ExceptionTablegetExceptionTable()Returnsexception_table[].intgetMaxLocals()Returnsmax_locals.intgetMaxStack()Returnsmax_stack.(package private) voidgetRefClasses(java.util.Map<java.lang.String,java.lang.String> classnames)voidinsertLocalVar(int where, int size)Changes the index numbers of the local variables to append a new parameter.CodeIteratoriterator()Makes a new iterator for reading this code attribute.intlength()Returns the length of thisattribute_infostructure.(package private) voidrenameClass(java.lang.String oldname, java.lang.String newname)(package private) voidrenameClass(java.util.Map<java.lang.String,java.lang.String> classnames)voidset(byte[] newinfo)This method is not available.voidsetAttribute(StackMap sm)Adds a stack map table for J2ME (CLDC).voidsetAttribute(StackMapTable smt)Adds 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(java.io.DataOutputStream out)-
Methods inherited from class javassist.bytecode.AttributeInfo
copyAll, getConstPool, getLength, getName, getRefClasses, lookup, read, remove, renameClass, renameClass, writeAll
-
-
-
-
Field Detail
-
tag
public static final java.lang.String tag
The name of this attribute"Code".- See Also:
- Constant Field Values
-
maxStack
private int maxStack
-
maxLocals
private int maxLocals
-
exceptions
private ExceptionTable exceptions
-
attributes
private java.util.List<AttributeInfo> attributes
-
-
Constructor Detail
-
CodeAttribute
public CodeAttribute(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable)
Constructs aCode_attribute.- Parameters:
cp- constant pool tablestack-max_stacklocals-max_localscode-code[]etable-exception_table[]
-
CodeAttribute
private CodeAttribute(ConstPool cp, CodeAttribute src, java.util.Map<java.lang.String,java.lang.String> classnames) throws BadBytecode
Constructs 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, java.io.DataInputStream in) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
copy
public AttributeInfo copy(ConstPool newCp, java.util.Map<java.lang.String,java.lang.String> classnames) throws CodeAttribute.RuntimeCopyException
Makes 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
void write(java.io.DataOutputStream out) throws java.io.IOException- Overrides:
writein classAttributeInfo- Throws:
java.io.IOException
-
get
public byte[] get()
This method is not available.- Overrides:
getin classAttributeInfo- Throws:
java.lang.UnsupportedOperationException- always thrown.
-
set
public void set(byte[] newinfo)
This method is not available.- Overrides:
setin classAttributeInfo- Throws:
java.lang.UnsupportedOperationException- always thrown.
-
renameClass
void renameClass(java.lang.String oldname, java.lang.String newname)- Overrides:
renameClassin classAttributeInfo
-
renameClass
void renameClass(java.util.Map<java.lang.String,java.lang.String> classnames)
- Overrides:
renameClassin classAttributeInfo
-
getRefClasses
void getRefClasses(java.util.Map<java.lang.String,java.lang.String> classnames)
- Overrides:
getRefClassesin classAttributeInfo
-
getDeclaringClass
public java.lang.String 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
public int computeMaxStack() throws BadBytecodeComputes 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
public CodeIterator iterator()
Makes a new iterator for reading this code attribute.
-
getExceptionTable
public ExceptionTable getExceptionTable()
Returnsexception_table[].
-
getAttributes
public java.util.List<AttributeInfo> 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:
AttributeInfo
-
getAttribute
public AttributeInfo getAttribute(java.lang.String name)
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
public void setAttribute(StackMapTable smt)
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
public void setAttribute(StackMap sm)
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, java.util.Map<java.lang.String,java.lang.String> classnames, ExceptionTable etable, CodeAttribute destCa) throws BadBytecode
Copies code.- Throws:
BadBytecode
-
copyCode
private static CodeAttribute.LdcEntry copyCode(byte[] code, int beginPos, int endPos, ConstPool srcCp, byte[] newcode, ConstPool destCp, java.util.Map<java.lang.String,java.lang.String> classnameMap) throws BadBytecode
- Throws:
BadBytecode
-
copyConstPoolInfo
private static void copyConstPoolInfo(int i, byte[] code, ConstPool srcCp, byte[] newcode, ConstPool destCp, java.util.Map<java.lang.String,java.lang.String> classnameMap)
-
insertLocalVar
public void insertLocalVar(int where, int size) throws BadBytecodeChanges 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:
LocalVariableAttribute.shiftIndex(int, int),LocalVariableAttribute.shiftIndex(int, int),StackMapTable.insertLocal(int, int, int),StackMap.insertLocal(int, int, int)
-
shiftIndex
private static void shiftIndex(CodeIterator ci, int lessThan, int delta) throws BadBytecode
- 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
-
-