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 `code` field of a `Code_attribute` structure, use `CodeIterator`.

See Also:
  - `CodeIterator`
  - `iterator()`

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`CodeAttribute.RuntimeCopyException`
An exception that may be thrown by `copy()` in `CodeAttribute`.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`tag`
The name of this attribute `"Code"`.

### 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
Constructor
Description
`CodeAttribute(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable)`
Constructs a `Code_attribute`.

## Method Summary

Modifier and Type
Method
Description
`int`
`computeMaxStack()`
Computes the maximum stack size and sets `max_stack` to the computed size.
`AttributeInfo`
`copy(ConstPool newCp, Map<String,String> classnames)`
Makes a copy.
`byte[]`
`get()`
This method is not available.
`AttributeInfo`
`getAttribute(String name)`
Returns the attribute with the specified name.
`List<AttributeInfo>`
`getAttributes()`
Returns `attributes[]`.
`byte[]`
`getCode()`
Returns `code[]`.
`int`
`getCodeLength()`
Returns `code_length`.
`String`
`getDeclaringClass()`
Returns the name of the class declaring the method including this code attribute.
`ExceptionTable`
`getExceptionTable()`
Returns `exception_table[]`.
`int`
`getMaxLocals()`
Returns `max_locals`.
`int`
`getMaxStack()`
Returns `max_stack`.
`void`
`insertLocalVar(int where, int size)`
Changes the index numbers of the local variables to append a new parameter.
`CodeIterator`
`iterator()`
Makes a new iterator for reading this code attribute.
`int`
`length()`
Returns the length of this `attribute_info` structure.
`void`
`set(byte[] newinfo)`
This method is not available.
`void`
`setAttribute(StackMap sm)`
Adds a stack map table for J2ME (CLDC).
`void`
`setAttribute(StackMapTable smt)`
Adds a stack map table.
`void`
`setMaxLocals(int value)`
Sets `max_locals`.
`void`
`setMaxStack(int value)`
Sets `max_stack`.

### Methods inherited from class javassist.bytecode.AttributeInfo

`getConstPool, getName`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### tag

public static final String tag
The name of this attribute `"Code"`.

See Also:
  - Constant Field Values

## Constructor Details

### CodeAttribute

public CodeAttribute(ConstPool cp, int stack, int locals, byte[] code, ExceptionTable etable)
Constructs a `Code_attribute`.

Parameters:
  `cp` - constant pool table
  `stack` - `max_stack`
  `locals` - `max_locals`
  `code` - `code[]`
  `etable` - `exception_table[]`

## Method Details

### copy

public AttributeInfo copy(ConstPool newCp, Map<String,String> classnames) throws CodeAttribute.RuntimeCopyException
Makes a copy. Class names are replaced according to the given `Map` object.

Overrides:
  `copy` in class `AttributeInfo`
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 a `BadBytecode` exception is thrown, it is converted into `RuntimeCopyException`.

### length

public int length()
Returns the length of this `attribute_info` structure. The returned value is `attribute_length + 6`.

Overrides:
  `length` in class `AttributeInfo`

### get

public byte[] get()
This method is not available.

Overrides:
  `get` in class `AttributeInfo`
Throws:
  `UnsupportedOperationException` - always thrown.

### set

public void set(byte[] newinfo)
This method is not available.

Overrides:
  `set` in class `AttributeInfo`
Throws:
  `UnsupportedOperationException` - always thrown.

### getDeclaringClass

public String getDeclaringClass()
Returns the name of the class declaring the method including this code attribute.

### getMaxStack

public int getMaxStack()
Returns `max_stack`.

### setMaxStack

public void setMaxStack(int value)
Sets `max_stack`.

### computeMaxStack

public int computeMaxStack() throws BadBytecode
Computes the maximum stack size and sets `max_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()
Returns `max_locals`.

### setMaxLocals

public void setMaxLocals(int value)
Sets `max_locals`.

### getCodeLength

public int getCodeLength()
Returns `code_length`.

### getCode

public byte[] getCode()
Returns `code[]`.

### iterator

public CodeIterator iterator()
Makes a new iterator for reading this code attribute.

### getExceptionTable

public ExceptionTable getExceptionTable()
Returns `exception_table[]`.

### getAttributes

public List<AttributeInfo> getAttributes()
Returns `attributes[]`. It returns a list of `AttributeInfo`. 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(String name)
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

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

### insertLocalVar

public void insertLocalVar(int where, int size) throws BadBytecode
Changes the index numbers of the local variables to append a new parameter. This method does not update `LocalVariableAttribute`, `LocalVariableTypeAttribute`, `StackMapTable`, or `StackMap`. 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)`