Overview | Package | Class | Use | Tree | Deprecated | Index
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## javassist.bytecode
Class CodeIterator

    java.lang.Object
      |
      +--javassist.bytecode.CodeIterator

All Implemented Interfaces:
  Opcode

public class CodeIterator
extends java.lang.Object
implements Opcode

An iterator for editing a code attribute.

This iterator does not provide `remove()`. If a piece of code in a `Code_attribute` is unnecessary, it should be overwritten with `NOP`.

See Also:
  `CodeAttribute.iterator()`

Field Summary

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, 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`

Method Summary
`int` | `append(byte[] code)` Appends the given bytecode sequence at the end.
`void` | `append(ExceptionTable et, int offset)` Copies and appends the entries in the given exception table at the end of the exception table in the code attribute edited by this object.
`void` | `appendGap(int gapLength)` Appends a gap at the end of the bytecode sequence.
`void` | `begin()` Moves to the first instruction.
`int` | `byteAt(int index)` Returns the unsigned 8bit value at the given index.
`CodeAttribute` | `get()` Returns a Code attribute read with this iterator.
`int` | `getCodeLength()` Returns `code_length` of `Code_attribute`.
`boolean` | `hasNext()` Returns true if there is more instructions.
`int` | `insert(byte[] code)` Inserts the given bytecode sequence before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`).
`void` | `insert(ExceptionTable et, int offset)` Copies and inserts the entries in the given exception table at the beginning of the exception table in the code attribute edited by this object.
`void` | `insert(int pos, byte[] code)` Inserts the given bytecode sequence before the instruction at the given index `pos`.
`int` | `insertEx(byte[] code)` Inserts the given bytecode sequence exclusively before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`).
`void` | `insertEx(int pos, byte[] code)` Inserts the given bytecode sequence exclusively before the instruction at the given index `pos`.
`int` | `insertExGap(int length)` Inserts an exclusive gap before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`).
`int` | `insertExGap(int pos, int length)` Inserts an exclusive gap in front of the instruction at the given index `pos`.
`int` | `insertGap(int length)` Inserts a gap before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`).
`int` | `insertGap(int pos, int length)` Inserts a gap in front of the instruction at the given index `pos`.
`void` | `move(int index)` Moves to the given index.
`int` | `next()` Returns the index of the next instruction (not the operand following the current opcode).
`int` | `s16bitAt(int index)` Returns the signed 16bit value at the given index.
`int` | `s32bitAt(int index)` Returns the signed 32bit value at the given index.
`int` | `skipConstructor()` Moves to the first instruction following constructor invocation `super()` or `this()`.
`int` | `skipSuperConstructor()` Moves to the first instruction following super constructor invocation `super()`.
`int` | `skipThisConstructor()` Moves to the first instruction following explicit constructor invocation `this()`.
`int` | `u16bitAt(int index)` Returns the unsigned 16bit value at the given index.
`void` | `write(byte[] code, int index)` Writes a byte array at the index.
`void` | `write16bit(int value, int index)` Writes a 16 bit integer at the index.
`void` | `write32bit(int value, int index)` Writes a 32bit integer at the index.
`void` | `writeByte(int value, int index)` Writes an 8bit value at the given index.

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Method Detail

### begin

    public void begin()

  Moves to the first instruction.

### move

    public void move(int index)

  Moves to the given index.

  The index of the next instruction is set to the given index. The successive call to `next()` returns the index that has been given to `move()`.

  Note that the index is into the byte array returned by `get().getCode()`.

  See Also:
    `CodeAttribute.getCode()`

### get

    public CodeAttribute get()

  Returns a Code attribute read with this iterator.

### getCodeLength

    public int getCodeLength()

  Returns `code_length` of `Code_attribute`.

### byteAt

    public int byteAt(int index)

  Returns the unsigned 8bit value at the given index.

### writeByte

    public void writeByte(int value,
                          int index)

  Writes an 8bit value at the given index.

### u16bitAt

    public int u16bitAt(int index)

  Returns the unsigned 16bit value at the given index.

### s16bitAt

    public int s16bitAt(int index)

  Returns the signed 16bit value at the given index.

### write16bit

    public void write16bit(int value,
                           int index)

  Writes a 16 bit integer at the index.

### s32bitAt

    public int s32bitAt(int index)

  Returns the signed 32bit value at the given index.

### write32bit

    public void write32bit(int value,
                           int index)

  Writes a 32bit integer at the index.

### write

    public void write(byte[] code,
                      int index)

  Writes a byte array at the index.

  Parameters:
    `code` - may be a zero-length array.

### hasNext

    public boolean hasNext()

  Returns true if there is more instructions.

### next

    public int next()
             throws BadBytecode

  Returns the index of the next instruction (not the operand following the current opcode).

  Note that the index is into the byte array returned by `get().getCode()`.

    `BadBytecode`
  See Also:
    `CodeAttribute.getCode()`, `byteAt(int)`

### skipConstructor

    public int skipConstructor()
                        throws BadBytecode

  Moves to the first instruction following constructor invocation `super()` or `this()`.

  This method skips all the instructions for executing `super()` or `this()`, which should be placed at the beginning of a constructor body.

  This method returns the index of INVOKESPECIAL instruction executing `super()` or `this()`. A successive call to `next()` returns the index of the next instruction following that INVOKESPECIAL.

  This method works only for a constructor.

  Returns:
    the index of the INVOKESPECIAL instruction, or -1 if a constructor invocation is not found.
    `BadBytecode`

### skipSuperConstructor

    public int skipSuperConstructor()
                             throws BadBytecode

  Moves to the first instruction following super constructor invocation `super()`.

  This method skips all the instructions for executing `super()`, which should be placed at the beginning of a constructor body.

  This method returns the index of INVOKESPECIAL instruction executing `super()`. A successive call to `next()` returns the index of the next instruction following that INVOKESPECIAL.

  This method works only for a constructor.

  Returns:
    the index of the INVOKESPECIAL instruction, or -1 if a super constructor invocation is not found but `this()` is found.
    `BadBytecode`

### skipThisConstructor

    public int skipThisConstructor()
                            throws BadBytecode

  Moves to the first instruction following explicit constructor invocation `this()`.

  This method skips all the instructions for executing `this()`, which should be placed at the beginning of a constructor body.

  This method returns the index of INVOKESPECIAL instruction executing `this()`. A successive call to `next()` returns the index of the next instruction following that INVOKESPECIAL.

  This method works only for a constructor.

  Returns:
    the index of the INVOKESPECIAL instruction, or -1 if a explicit constructor invocation is not found but `super()` is found.
    `BadBytecode`

### insert

    public int insert(byte[] code)
               throws BadBytecode

  Inserts the given bytecode sequence before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`). Branch offsets and the exception table are also updated.

  If the next instruction is at the beginning of a block statement, then the bytecode is inserted within that block.

  An extra gap may be inserted at the end of the inserted bytecode sequence for adjusting alignment if the code attribute includes `LOOKUPSWITCH` or `TABLESWITCH`.

  Parameters:
    `code` - inserted bytecode sequence.
  Returns:
    the index indicating the first byte of the inserted byte sequence.
    `BadBytecode`

### insert

    public void insert(int pos,
                       byte[] code)
                throws BadBytecode

  Inserts the given bytecode sequence before the instruction at the given index `pos`. Branch offsets and the exception table are also updated.

  If the instruction at the given index is at the beginning of a block statement, then the bytecode is inserted within that block.

  An extra gap may be inserted at the end of the inserted bytecode sequence for adjusting alignment if the code attribute includes `LOOKUPSWITCH` or `TABLESWITCH`.

  Parameters:
    `pos` - the index at which a byte sequence is inserted.
    `code` - inserted bytecode sequence.
    `BadBytecode`

### insertEx

    public int insertEx(byte[] code)
                 throws BadBytecode

  Inserts the given bytecode sequence exclusively before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`). Branch offsets and the exception table are also updated.

  If the next instruction is at the beginning of a block statement, then the bytecode is excluded from that block.

  An extra gap may be inserted at the end of the inserted bytecode sequence for adjusting alignment if the code attribute includes `LOOKUPSWITCH` or `TABLESWITCH`.

  Parameters:
    `code` - inserted bytecode sequence.
  Returns:
    the index indicating the first byte of the inserted byte sequence.
    `BadBytecode`

### insertEx

    public void insertEx(int pos,
                         byte[] code)
                  throws BadBytecode

  Inserts the given bytecode sequence exclusively before the instruction at the given index `pos`. Branch offsets and the exception table are also updated.

  If the instruction at the given index is at the beginning of a block statement, then the bytecode is excluded from that block.

  An extra gap may be inserted at the end of the inserted bytecode sequence for adjusting alignment if the code attribute includes `LOOKUPSWITCH` or `TABLESWITCH`.

  Parameters:
    `pos` - the index at which a byte sequence is inserted.
    `code` - inserted bytecode sequence.
    `BadBytecode`

### insertGap

    public int insertGap(int length)
                  throws BadBytecode

  Inserts a gap before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`). Branch offsets and the exception table are also updated. The inserted gap is filled with NOP. The gap length may be extended to a multiple of 4.

  If the next instruction is at the beginning of a block statement, then the gap is inserted within that block.

  Parameters:
    `length` - gap length
  Returns:
    the index indicating the first byte of the inserted gap.
    `BadBytecode`

### insertGap

    public int insertGap(int pos,
                         int length)
                  throws BadBytecode

  Inserts a gap in front of the instruction at the given index `pos`. Branch offsets and the exception table are also updated. The inserted gap is filled with NOP. The gap length may be extended to a multiple of 4.

  If the instruction at the given index is at the beginning of a block statement, then the gap is inserted within that block.

  Parameters:
    `pos` - the index at which a gap is inserted.
    `length` - gap length.
  Returns:
    the length of the inserted gap. It might be bigger than `length`.
    `BadBytecode`

### insertExGap

    public int insertExGap(int length)
                    throws BadBytecode

  Inserts an exclusive gap before the next instruction that would be returned by `next()` (not before the instruction returned by tha last call to `next()`). Branch offsets and the exception table are also updated. The inserted gap is filled with NOP. The gap length may be extended to a multiple of 4.

  If the next instruction is at the beginning of a block statement, then the gap is excluded from that block.

  Parameters:
    `length` - gap length
  Returns:
    the index indicating the first byte of the inserted gap.
    `BadBytecode`

### insertExGap

    public int insertExGap(int pos,
                           int length)
                    throws BadBytecode

  Inserts an exclusive gap in front of the instruction at the given index `pos`. Branch offsets and the exception table are also updated. The inserted gap is filled with NOP. The gap length may be extended to a multiple of 4.

  If the instruction at the given index is at the beginning of a block statement, then the gap is excluded from that block.

  Parameters:
    `pos` - the index at which a gap is inserted.
    `length` - gap length.
  Returns:
    the length of the inserted gap. It might be bigger than `length`.
    `BadBytecode`

### insert

    public void insert(ExceptionTable et,
                       int offset)

  Copies and inserts the entries in the given exception table at the beginning of the exception table in the code attribute edited by this object.

  Parameters:
    `offset` - the value added to the code positions included in the entries.

### append

    public int append(byte[] code)

  Appends the given bytecode sequence at the end.

  Parameters:
    `code` - the bytecode appended.
  Returns:
    the position of the first byte of the appended bytecode.

### appendGap

    public void appendGap(int gapLength)

  Appends a gap at the end of the bytecode sequence.

### append

    public void append(ExceptionTable et,
                       int offset)

  Copies and appends the entries in the given exception table at the end of the exception table in the code attribute edited by this object.

  Parameters:
    `offset` - the value added to the code positions included in the entries.

Overview | Package | Class | Use | Tree | Deprecated | Index
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Javassist, a Java-bytecode translator toolkit. Copyright (C) 1999-2003 Shigeru Chiba. All Rights Reserved.