javassist.bytecode
public class CodeIterator extends Object implements Opcode
If there are multiple CodeIterator
s referring to the
same Code_attribute
, then inserting a gap by one
CodeIterator
will break the other
CodeIterator
.
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: iterator
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(int pos, byte[] code)
Inserts the given bytecode sequence
before the instruction at the given index pos .
|
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.
|
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 .
|
int | lookAhead()
Obtains the value that the next call
to next() will return.
|
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 instruction for
either super() or this() .
|
int | skipSuperConstructor()
Moves to the instruction for super() .
|
int | skipThisConstructor()
Moves to the instruction for 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. |
Parameters: code the bytecode appended.
Returns: the position of the first byte of the appended bytecode.
Parameters: offset the value added to the code positions included in the entries.
Parameters: gapLength gap length
code_length
of Code_attribute
.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.
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.
Parameters: offset the value added to the code positions included in the entries.
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.
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.
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.
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
.
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.
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
.
next()
will return.
This method is side-effects free.
Successive calls to lookAhead()
return the
same value until next()
is called.
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: getCode
Note that the index is into the byte array returned by
get().getCode()
.
See Also: getCode CodeIterator
super()
or this()
.
This method skips all the instructions for computing arguments
to 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.
super()
.
This method skips all the instructions for computing arguments to
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.
this()
.
This method skips all the instructions for computing arguments to
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.
Parameters: code may be a zero-length array.