javassist.bytecode
public class Bytecode extends ByteVector implements Cloneable, Opcode
A Bytecode
object is an unbounded array
containing bytecode. For example,
ConstPool cp = ...; // constant pool table Bytecode b = new Bytecode(cp, 1, 0); b.addIconst(3); b.addReturn(CtClass.intType); CodeAttribute ca = b.toCodeAttribute();
This program produces a Code attribute including a bytecode sequence:
iconst_3 ireturn
See Also: ConstPool CodeAttribute
Field Summary | |
---|---|
static CtClass | THIS
Represents the CtClass file using the
constant pool table given to this Bytecode object. |
Constructor Summary | |
---|---|
Bytecode(ConstPool cp, int stacksize, int localvars)
Constructs a Bytecode object with an empty bytecode
sequence.
| |
Bytecode(ConstPool cp)
Constructs a Bytecode object with an empty bytecode
sequence. |
Method Summary | |
---|---|
void | add(int code)
Appends an 8bit value to the end of the bytecode sequence. |
void | add32bit(int value)
Appends a 32bit value to the end of the bytecode sequence. |
void | addAload(int n)
Appends ALOAD or (WIDE) ALOAD_<n>
|
void | addAnewarray(String classname)
Appends ANEWARRAY.
|
void | addAnewarray(CtClass clazz, int length)
Appends ICONST and ANEWARRAY.
|
void | addAstore(int n)
Appends ASTORE or (WIDE) ASTORE_<n>
|
void | addCheckcast(CtClass c)
Appends CHECKCAST.
|
void | addCheckcast(String classname)
Appends CHECKCAST.
|
void | addConstZero(CtClass type)
Appends an instruction for pushing zero or null on the stack.
|
void | addDconst(double d)
Appends DCONST or DCONST_<n>
|
void | addDload(int n)
Appends DLOAD or (WIDE) DLOAD_<n>
|
void | addDstore(int n)
Appends DSTORE or (WIDE) DSTORE_<n>
|
void | addExceptionHandler(int start, int end, int handler, CtClass type)
Adds a new entry of exception_table . |
void | addExceptionHandler(int start, int end, int handler, String type)
Adds a new entry of exception_table .
|
void | addExceptionHandler(int start, int end, int handler, int type)
Adds a new entry of exception_table . |
void | addFconst(float f)
Appends FCONST or FCONST_<n>
|
void | addFload(int n)
Appends FLOAD or (WIDE) FLOAD_<n>
|
void | addFstore(int n)
Appends FSTORE or FSTORE_<n>
|
void | addGap(int length)
Appends the length-byte gap to the end of the bytecode sequence.
|
void | addGetfield(CtClass c, String name, String type)
Appends GETFIELD.
|
void | addGetfield(String c, String name, String type)
Appends GETFIELD.
|
void | addGetstatic(CtClass c, String name, String type)
Appends GETSTATIC.
|
void | addGetstatic(String c, String name, String type)
Appends GETSTATIC.
|
void | addIconst(int n)
Appends ICONST or ICONST_<n>
|
void | addIload(int n)
Appends ILOAD or (WIDE) ILOAD_<n>
|
void | addIndex(int index)
Appends a 16bit value to the end of the bytecode sequence.
|
void | addInstanceof(String classname)
Appends INSTANCEOF.
|
void | addInvokeinterface(CtClass clazz, String name, CtClass returnType, CtClass[] paramTypes, int count)
Appends INVOKEINTERFACE.
|
void | addInvokeinterface(CtClass clazz, String name, String desc, int count)
Appends INVOKEINTERFACE.
|
void | addInvokeinterface(String classname, String name, String desc, int count)
Appends INVOKEINTERFACE.
|
void | addInvokeinterface(int clazz, String name, String desc, int count)
Appends INVOKEINTERFACE.
|
void | addInvokespecial(CtClass clazz, String name, CtClass returnType, CtClass[] paramTypes)
Appends INVOKESPECIAL.
|
void | addInvokespecial(CtClass clazz, String name, String desc)
Appends INVOKESPECIAL.
|
void | addInvokespecial(String clazz, String name, String desc)
Appends INVOKESPECIAL.
|
void | addInvokespecial(int clazz, String name, String desc)
Appends INVOKESPECIAL.
|
void | addInvokestatic(CtClass clazz, String name, CtClass returnType, CtClass[] paramTypes)
Appends INVOKESTATIC.
|
void | addInvokestatic(CtClass clazz, String name, String desc)
Appends INVOKESTATIC.
|
void | addInvokestatic(String classname, String name, String desc)
Appends INVOKESTATIC.
|
void | addInvokestatic(int clazz, String name, String desc)
Appends INVOKESTATIC.
|
void | addInvokevirtual(CtClass clazz, String name, CtClass returnType, CtClass[] paramTypes)
Appends INVOKEVIRTUAL.
|
void | addInvokevirtual(CtClass clazz, String name, String desc)
Appends INVOKEVIRTUAL.
|
void | addInvokevirtual(String classname, String name, String desc)
Appends INVOKEVIRTUAL.
|
void | addInvokevirtual(int clazz, String name, String desc)
Appends INVOKEVIRTUAL.
|
void | addIstore(int n)
Appends ISTORE or (WIDE) ISTORE_<n>
|
void | addLconst(long n)
Appends LCONST or LCONST_<n>
|
void | addLdc(String s)
Appends LDC or LDC_W. |
void | addLdc(int i)
Appends LDC or LDC_W.
|
void | addLdc2w(long l)
Appends LDC2_W. |
void | addLdc2w(double d)
Appends LDC2_W. |
void | addLload(int n)
Appends LLOAD or (WIDE) LLOAD_<n>
|
int | addLoad(int n, CtClass type)
Appends an instruction for loading a value from the
local variable at the index n .
|
int | addLoadParameters(CtClass[] params, int offset)
Appends instructions for loading all the parameters onto the
operand stack.
|
void | addLstore(int n)
Appends LSTORE or LSTORE_<n>
|
int | addMultiNewarray(CtClass clazz, int[] dimensions)
Appends MULTINEWARRAY.
|
int | addMultiNewarray(CtClass clazz, int dim)
Appends MULTINEWARRAY. |
int | addMultiNewarray(String desc, int dim)
Appends MULTINEWARRAY.
|
void | addNew(CtClass clazz)
Appends NEW.
|
void | addNew(String classname)
Appends NEW.
|
void | addNewarray(int atype, int length)
Appends NEWARRAY for primitive types.
|
void | addOpcode(int code)
Appends an 8bit opcode to the end of the bytecode sequence.
|
void | addPrintln(String message)
Appends instructions for executing
java.lang.System.println(message) .
|
void | addPutfield(CtClass c, String name, String desc)
Appends PUTFIELD.
|
void | addPutfield(String classname, String name, String desc)
Appends PUTFIELD.
|
void | addPutstatic(CtClass c, String name, String desc)
Appends PUTSTATIC.
|
void | addPutstatic(String classname, String fieldName, String desc)
Appends PUTSTATIC.
|
void | addRet(int var)
Appends RET.
|
void | addReturn(CtClass type)
Appends ARETURN, IRETURN, .., or RETURN.
|
int | addStore(int n, CtClass type)
Appends an instruction for storing a value into the
local variable at the index n .
|
Object | clone()
Creates and returns a copy of this object.
|
int | currentPc()
Returns the length of bytecode sequence
that have been added so far. |
byte[] | get()
Returns the produced bytecode sequence. |
ConstPool | getConstPool()
Gets a constant pool table. |
ExceptionTable | getExceptionTable()
Returns exception_table . |
int | getMaxLocals()
Gets max_locals . |
int | getMaxStack()
Gets max_stack . |
int | getStackDepth()
Returns the current stack depth. |
void | growStack(int diff)
Increases the current stack depth.
|
void | incMaxLocals(int diff)
Increments max_locals . |
int | length()
Returns the length of the bytecode sequence. |
int | read(int offset)
Reads a signed 8bit value at the offset from the beginning of the
bytecode sequence.
|
int | read16bit(int offset)
Reads a signed 16bit value at the offset from the beginning of the
bytecode sequence. |
int | read32bit(int offset)
Reads a signed 32bit value at the offset from the beginning of the
bytecode sequence. |
void | setMaxLocals(int size)
Sets max_locals . |
void | setMaxLocals(boolean isStatic, CtClass[] params, int locals)
Sets max_locals .
|
void | setMaxStack(int size)
Sets max_stack .
|
void | setStackDepth(int depth)
Sets the current stack depth.
|
CodeAttribute | toCodeAttribute()
Converts to a CodeAttribute . |
void | write(int offset, int value)
Writes an 8bit value at the offset from the beginning of the
bytecode sequence.
|
void | write16bit(int offset, int value)
Writes an 16bit value at the offset from the beginning of the
bytecode sequence. |
void | write32bit(int offset, int value)
Writes an 32bit value at the offset from the beginning of the
bytecode sequence. |
CtClass
file using the
constant pool table given to this Bytecode
object.Bytecode
object with an empty bytecode
sequence.
The parameters stacksize
and localvars
specify initial values
of max_stack
and max_locals
.
They can be changed later.
Parameters: cp constant pool table. stacksize max_stack
. localvars max_locals
.
Bytecode
object with an empty bytecode
sequence. The initial values of max_stack
and
max_locals
are zero.
Parameters: cp constant pool table.
Parameters: n an index into the local variable array.
Parameters: classname the qualified class name of the element type.
Parameters: clazz the elememnt type. length the array length.
Parameters: n an index into the local variable array.
Parameters: c the type.
Parameters: classname a fully-qualified class name.
Parameters: type the type of the zero value (or null).
Parameters: d the pushed double constant.
Parameters: n an index into the local variable array.
Parameters: n an index into the local variable array.
exception_table
.exception_table
.
Parameters: type the fully-qualified name of a throwable class.
exception_table
.Parameters: f the pushed float constant.
Parameters: n an index into the local variable array.
Parameters: n an index into the local variable array.
Parameters: length the gap length in byte.
Parameters: c the class. name the field name. type the descriptor of the field type.
See Also: of
Parameters: c the fully-qualified class name. name the field name. type the descriptor of the field type.
See Also: of
Parameters: c the class name the field name type the descriptor of the field type.
See Also: of
Parameters: c the fully-qualified class name name the field name type the descriptor of the field type.
See Also: of
Parameters: n the pushed integer constant.
Parameters: n an index into the local variable array.
Parameters: classname the class name.
Parameters: clazz the target class. name the method name returnType the return type. paramTypes the parameter types. count the count operand of the instruction.
Parameters: clazz the target class. name the method name desc the descriptor of the method signature. count the count operand of the instruction.
See Also: (CtClass,CtClass[])
Parameters: classname the fully-qualified class name. name the method name desc the descriptor of the method signature. count the count operand of the instruction.
See Also: (CtClass,CtClass[])
Parameters: clazz the index of CONSTANT_Class_info
structure. name the method name desc the descriptor of the method signature. count the count operand of the instruction.
See Also: (CtClass,CtClass[])
Parameters: clazz the target class. name the method name. returnType the return type. paramTypes the parameter types.
Parameters: clazz the target class. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
(CtClass[])
Parameters: clazz the fully-qualified class name. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
(CtClass[])
Parameters: clazz the index of CONSTANT_Class_info
structure. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
(CtClass[])
Parameters: clazz the target class. name the method name returnType the return type. paramTypes the parameter types.
Parameters: clazz the target class. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
Parameters: classname the fully-qualified class name. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
Parameters: clazz the index of CONSTANT_Class_info
structure. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
The specified method must not be an inherited method.
It must be directly declared in the class specified
in clazz
.
Parameters: clazz the target class. name the method name returnType the return type. paramTypes the parameter types.
The specified method must not be an inherited method.
It must be directly declared in the class specified
in clazz
.
Parameters: clazz the target class. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
The specified method must not be an inherited method.
It must be directly declared in the class specified
in classname
.
Parameters: classname the fully-qualified class name. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
The specified method must not be an inherited method.
It must be directly declared in the class specified
by clazz
.
Parameters: clazz the index of CONSTANT_Class_info
structure. name the method name desc the descriptor of the method signature.
See Also: (CtClass,CtClass[])
Parameters: n an index into the local variable array.
Parameters: n the pushed long integer constant.
String
object.
Parameters: s the character string pushed by LDC or LDC_W.
Parameters: i index into the constant pool.
Parameters: n an index into the local variable array.
n
.
Parameters: n the index. type the type of the loaded value.
Returns: the size of the value (1 or 2 word).
Parameters: offset the index of the first parameter. It is 0 if the method is static. Otherwise, it is 1.
Parameters: n an index into the local variable array.
Parameters: clazz the array type. dimensions the sizes of all dimensions.
Returns: the length of dimensions
.
Parameters: clazz the array type. dim the number of the dimensions.
Returns: the value of dim
.
Parameters: desc the type descriptor of the created array. dim dimensions.
Returns: the value of dim
.
Parameters: clazz the class of the created instance.
Parameters: classname the fully-qualified class name.
Parameters: atype T_BOOLEAN
, T_CHAR
, ...
See Also: Opcode
max_stack
is updated if the current stack depth
is the deepest so far.
Note: some instructions such as INVOKEVIRTUAL does not
update the current stack depth since the increment depends
on the method signature.
growStack()
must be explicitly called.
java.lang.System.println(message)
.
Parameters: message printed message.
Parameters: c the target class. name the field name. desc the descriptor of the field type.
Parameters: classname the fully-qualified name of the target class. name the field name. desc the descriptor of the field type.
Parameters: c the target class. name the field name. desc the descriptor of the field type.
Parameters: classname the fully-qualified name of the target class. fieldName the field name. desc the descriptor of the field type.
Parameters: var local variable
Parameters: type the return type.
n
.
Parameters: n the index. type the type of the stored value.
Returns: 2 if the type is long or double. Otherwise 1.
exception_table
.max_locals
.max_stack
.max_stack
if the current stack depth
is the deepest so far.
Parameters: diff the number added to the current stack depth.
max_locals
.Throws: ArrayIndexOutOfBoundsException if offset is invalid.
max_locals
.max_locals
.
This computes the number of local variables
used to pass method parameters and sets max_locals
to that number plus locals
.
Parameters: isStatic true if params
must be
interpreted as parameters to a static method. params parameter types. locals the number of local variables excluding
ones used to pass parameters.
max_stack
.
This value may be automatically updated when an instruction
is appended. A Bytecode
object maintains the current
stack depth whenever an instruction is added
by addOpcode()
. For example, if DUP is appended,
the current stack depth is increased by one. If the new stack
depth is more than max_stack
, then it is assigned
to max_stack
. However, if branch instructions are
appended, the current stack depth may not be correctly maintained.
See Also: Bytecode
max_stack
if the current stack depth
is the deepest so far.
Parameters: depth new value.
CodeAttribute
.Throws: ArrayIndexOutOfBoundsException if offset is invalid.