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 class
static class
An exception that may be thrown bycopy()
inCodeAttribute
. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate List
<AttributeInfo> private ExceptionTable
private int
private int
static final String
The 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
ConstructorsModifierConstructorDescriptionCodeAttribute
(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable) Constructs aCode_attribute
.(package private)
CodeAttribute
(ConstPool cp, int name_id, DataInputStream in) private
CodeAttribute
(ConstPool cp, CodeAttribute src, Map<String, String> classnames) Constructs a copy ofCode_attribute
. -
Method Summary
Modifier and TypeMethodDescriptionint
Computes the maximum stack size and setsmax_stack
to the computed size.Makes a copy.private static CodeAttribute.LdcEntry
copyCode
(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 void
copyConstPoolInfo
(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[]
.int
Returnscode_length
.Returns the name of the class declaring the method including this code attribute.Returnsexception_table[]
.int
Returnsmax_locals
.int
Returnsmax_stack
.(package private) void
getRefClasses
(Map<String, String> classnames) void
insertLocalVar
(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.int
length()
Returns the length of thisattribute_info
structure.(package private) void
renameClass
(String oldname, String newname) (package private) void
renameClass
(Map<String, String> classnames) void
set
(byte[] newinfo) This method is not available.void
setAttribute
(StackMap sm) Adds a stack map table for J2ME (CLDC).void
Adds a stack map table.(package private) void
setCode
(byte[] newinfo) Setscode[]
.void
setMaxLocals
(int value) Setsmax_locals
.void
setMaxStack
(int value) Setsmax_stack
.private static void
shiftIndex
(CodeIterator ci, int lessThan, int delta) private static void
shiftIndex0
(CodeIterator ci, int index, int opcode, int lessThan, int delta, int opcode_i_0, int opcode_i) private static void
shiftIndex8
(CodeIterator ci, int index, int opcode, int lessThan, int delta) (package private) void
write
(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_stack
locals
-max_locals
code
-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 givenMap
object.- Overrides:
copy
in classAttributeInfo
- Parameters:
newCp
- the constant pool table used by the new copy.classnames
- pairs of replaced and substituted class names.- Returns:
CodeAttribute
object.- Throws:
CodeAttribute.RuntimeCopyException
- if aBadBytecode
exception is thrown, it is converted intoRuntimeCopyException
.
-
length
public int length()Returns the length of thisattribute_info
structure. The returned value isattribute_length + 6
.- Overrides:
length
in classAttributeInfo
-
write
- Overrides:
write
in classAttributeInfo
- Throws:
IOException
-
get
public byte[] get()This method is not available.- Overrides:
get
in classAttributeInfo
- Throws:
UnsupportedOperationException
- always thrown.
-
set
public void set(byte[] newinfo) This method is not available.- Overrides:
set
in classAttributeInfo
- Throws:
UnsupportedOperationException
- always thrown.
-
renameClass
- Overrides:
renameClass
in classAttributeInfo
-
renameClass
- Overrides:
renameClass
in classAttributeInfo
-
getRefClasses
- Overrides:
getRefClasses
in 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_stack
to 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
AttributeInfo
object 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
-