public class Bytecode extends java.lang.Object implements java.lang.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
ConstPool
,
CodeAttribute
Modifier and Type | Field and Description |
---|---|
static CtClass |
THIS
Represents the
CtClass file using the
constant pool table given to this Bytecode object. |
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 and Description |
---|
Bytecode(ConstPool cp)
Constructs a
Bytecode object with an empty bytecode
sequence. |
Bytecode(ConstPool cp,
int stacksize,
int localvars)
Constructs a
Bytecode object with an empty bytecode
sequence. |
Modifier and Type | Method and Description |
---|---|
void |
add(int code)
Appends an 8bit value to the end of the bytecode sequence.
|
void |
add(int b1,
int b2) |
void |
add(int b1,
int b2,
int b3,
int b4) |
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(CtClass clazz,
int length)
Appends ICONST and ANEWARRAY.
|
void |
addAnewarray(java.lang.String classname)
Appends ANEWARRAY.
|
void |
addAstore(int n)
Appends ASTORE or (WIDE) ASTORE_<n>
|
void |
addCheckcast(CtClass c)
Appends CHECKCAST.
|
void |
addCheckcast(java.lang.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,
int type)
Adds a new entry of
exception_table . |
void |
addExceptionHandler(int start,
int end,
int handler,
java.lang.String 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,
java.lang.String name,
java.lang.String type)
Appends GETFIELD.
|
void |
addGetfield(java.lang.String c,
java.lang.String name,
java.lang.String type)
Appends GETFIELD.
|
void |
addGetstatic(CtClass c,
java.lang.String name,
java.lang.String type)
Appends GETSTATIC.
|
void |
addGetstatic(java.lang.String c,
java.lang.String name,
java.lang.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(java.lang.String classname)
Appends INSTANCEOF.
|
void |
addInvokedynamic(int bootstrap,
java.lang.String name,
java.lang.String desc)
Appends INVOKEDYNAMIC.
|
void |
addInvokeinterface(CtClass clazz,
java.lang.String name,
CtClass returnType,
CtClass[] paramTypes,
int count)
Appends INVOKEINTERFACE.
|
void |
addInvokeinterface(CtClass clazz,
java.lang.String name,
java.lang.String desc,
int count)
Appends INVOKEINTERFACE.
|
void |
addInvokeinterface(int clazz,
java.lang.String name,
java.lang.String desc,
int count)
Appends INVOKEINTERFACE.
|
void |
addInvokeinterface(java.lang.String classname,
java.lang.String name,
java.lang.String desc,
int count)
Appends INVOKEINTERFACE.
|
void |
addInvokespecial(boolean isInterface,
int clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESPECIAL.
|
void |
addInvokespecial(CtClass clazz,
java.lang.String name,
CtClass returnType,
CtClass[] paramTypes)
Appends INVOKESPECIAL.
|
void |
addInvokespecial(CtClass clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESPECIAL.
|
void |
addInvokespecial(int clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESPECIAL.
|
void |
addInvokespecial(java.lang.String clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESPECIAL.
|
void |
addInvokestatic(CtClass clazz,
java.lang.String name,
CtClass returnType,
CtClass[] paramTypes)
Appends INVOKESTATIC.
|
void |
addInvokestatic(CtClass clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESTATIC.
|
void |
addInvokestatic(int clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKESTATIC.
|
void |
addInvokestatic(java.lang.String classname,
java.lang.String name,
java.lang.String desc)
Appends INVOKESTATIC.
|
void |
addInvokevirtual(CtClass clazz,
java.lang.String name,
CtClass returnType,
CtClass[] paramTypes)
Appends INVOKEVIRTUAL.
|
void |
addInvokevirtual(CtClass clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKEVIRTUAL.
|
void |
addInvokevirtual(int clazz,
java.lang.String name,
java.lang.String desc)
Appends INVOKEVIRTUAL.
|
void |
addInvokevirtual(java.lang.String classname,
java.lang.String name,
java.lang.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(int i)
Appends LDC or LDC_W.
|
void |
addLdc(java.lang.String s)
Appends LDC or LDC_W.
|
void |
addLdc2w(double d)
Appends LDC2_W.
|
void |
addLdc2w(long l)
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 dim)
Appends MULTINEWARRAY.
|
int |
addMultiNewarray(CtClass clazz,
int[] dimensions)
Appends MULTINEWARRAY.
|
int |
addMultiNewarray(java.lang.String desc,
int dim)
Appends MULTINEWARRAY.
|
void |
addNew(CtClass clazz)
Appends NEW.
|
void |
addNew(java.lang.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(java.lang.String message)
Appends instructions for executing
java.lang.System.println(message) . |
void |
addPutfield(CtClass c,
java.lang.String name,
java.lang.String desc)
Appends PUTFIELD.
|
void |
addPutfield(java.lang.String classname,
java.lang.String name,
java.lang.String desc)
Appends PUTFIELD.
|
void |
addPutstatic(CtClass c,
java.lang.String name,
java.lang.String desc)
Appends PUTSTATIC.
|
void |
addPutstatic(java.lang.String classname,
java.lang.String fieldName,
java.lang.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 . |
java.lang.Object |
clone()
Creates and returns a copy of this object.
|
byte[] |
copy() |
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 |
getSize() |
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(boolean isStatic,
CtClass[] params,
int locals)
Sets
max_locals . |
void |
setMaxLocals(int size)
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.
|
public static final CtClass THIS
CtClass
file using the
constant pool table given to this Bytecode
object.public Bytecode(ConstPool cp, int stacksize, int localvars)
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.
cp
- constant pool table.stacksize
- max_stack
.localvars
- max_locals
.public Bytecode(ConstPool cp)
Bytecode
object with an empty bytecode
sequence. The initial values of max_stack
and
max_locals
are zero.cp
- constant pool table.setMaxStack(int)
,
setMaxLocals(int)
public java.lang.Object clone()
public ConstPool getConstPool()
public ExceptionTable getExceptionTable()
exception_table
.public CodeAttribute toCodeAttribute()
CodeAttribute
.public int length()
public byte[] get()
public int getMaxStack()
max_stack
.public void setMaxStack(int size)
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.
addOpcode(int)
public int getMaxLocals()
max_locals
.public void setMaxLocals(int size)
max_locals
.public void setMaxLocals(boolean isStatic, CtClass[] params, int locals)
max_locals
.
This computes the number of local variables
used to pass method parameters and sets max_locals
to that number plus locals
.
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.public void incMaxLocals(int diff)
max_locals
.public void addExceptionHandler(int start, int end, int handler, CtClass type)
exception_table
.public void addExceptionHandler(int start, int end, int handler, java.lang.String type)
exception_table
.type
- the fully-qualified name of a throwable class.public void addExceptionHandler(int start, int end, int handler, int type)
exception_table
.public int currentPc()
public int read(int offset)
java.lang.ArrayIndexOutOfBoundsException
- if offset is invalid.public int read16bit(int offset)
public int read32bit(int offset)
public void write(int offset, int value)
java.lang.ArrayIndexOutOfBoundsException
- if offset is invalid.public void write16bit(int offset, int value)
public void write32bit(int offset, int value)
public void add(int code)
public void add32bit(int value)
public void addGap(int length)
length
- the gap length in byte.public void addOpcode(int code)
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.
public void growStack(int diff)
max_stack
if the current stack depth
is the deepest so far.diff
- the number added to the current stack depth.public int getStackDepth()
public void setStackDepth(int depth)
max_stack
if the current stack depth
is the deepest so far.depth
- new value.public void addIndex(int index)
public void addAload(int n)
n
- an index into the local variable array.public void addAstore(int n)
n
- an index into the local variable array.public void addIconst(int n)
n
- the pushed integer constant.public void addConstZero(CtClass type)
type
- the type of the zero value (or null).public void addIload(int n)
n
- an index into the local variable array.public void addIstore(int n)
n
- an index into the local variable array.public void addLconst(long n)
n
- the pushed long integer constant.public void addLload(int n)
n
- an index into the local variable array.public void addLstore(int n)
n
- an index into the local variable array.public void addDconst(double d)
d
- the pushed double constant.public void addDload(int n)
n
- an index into the local variable array.public void addDstore(int n)
n
- an index into the local variable array.public void addFconst(float f)
f
- the pushed float constant.public void addFload(int n)
n
- an index into the local variable array.public void addFstore(int n)
n
- an index into the local variable array.public int addLoad(int n, CtClass type)
n
.n
- the index.type
- the type of the loaded value.public int addStore(int n, CtClass type)
n
.n
- the index.type
- the type of the stored value.public int addLoadParameters(CtClass[] params, int offset)
offset
- the index of the first parameter. It is 0
if the method is static. Otherwise, it is 1.public void addCheckcast(CtClass c)
c
- the type.public void addCheckcast(java.lang.String classname)
classname
- a fully-qualified class name.public void addInstanceof(java.lang.String classname)
classname
- the class name.public void addGetfield(CtClass c, java.lang.String name, java.lang.String type)
c
- the class.name
- the field name.type
- the descriptor of the field type.Descriptor.of(CtClass)
public void addGetfield(java.lang.String c, java.lang.String name, java.lang.String type)
c
- the fully-qualified class name.name
- the field name.type
- the descriptor of the field type.Descriptor.of(CtClass)
public void addGetstatic(CtClass c, java.lang.String name, java.lang.String type)
c
- the classname
- the field nametype
- the descriptor of the field type.Descriptor.of(CtClass)
public void addGetstatic(java.lang.String c, java.lang.String name, java.lang.String type)
c
- the fully-qualified class namename
- the field nametype
- the descriptor of the field type.Descriptor.of(CtClass)
public void addInvokespecial(CtClass clazz, java.lang.String name, CtClass returnType, CtClass[] paramTypes)
clazz
- the target class.name
- the method name.returnType
- the return type.paramTypes
- the parameter types.public void addInvokespecial(CtClass clazz, java.lang.String name, java.lang.String desc)
clazz
- the target class.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
,
Descriptor.ofConstructor(CtClass[])
public void addInvokespecial(java.lang.String clazz, java.lang.String name, java.lang.String desc)
clazz
- the fully-qualified class name.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
,
Descriptor.ofConstructor(CtClass[])
public void addInvokespecial(int clazz, java.lang.String name, java.lang.String desc)
clazz
- the index of CONSTANT_Class_info
structure.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
,
Descriptor.ofConstructor(CtClass[])
public void addInvokespecial(boolean isInterface, int clazz, java.lang.String name, java.lang.String desc)
isInterface
- true if the invoked method is a default method
declared in an interface.clazz
- the index of CONSTANT_Class_info
structure.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
,
Descriptor.ofConstructor(CtClass[])
public void addInvokestatic(CtClass clazz, java.lang.String name, CtClass returnType, CtClass[] paramTypes)
clazz
- the target class.name
- the method namereturnType
- the return type.paramTypes
- the parameter types.public void addInvokestatic(CtClass clazz, java.lang.String name, java.lang.String desc)
clazz
- the target class.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokestatic(java.lang.String classname, java.lang.String name, java.lang.String desc)
classname
- the fully-qualified class name.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokestatic(int clazz, java.lang.String name, java.lang.String desc)
clazz
- the index of CONSTANT_Class_info
structure.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokevirtual(CtClass clazz, java.lang.String name, CtClass returnType, CtClass[] paramTypes)
The specified method must not be an inherited method.
It must be directly declared in the class specified
in clazz
.
clazz
- the target class.name
- the method namereturnType
- the return type.paramTypes
- the parameter types.public void addInvokevirtual(CtClass clazz, java.lang.String name, java.lang.String desc)
The specified method must not be an inherited method.
It must be directly declared in the class specified
in clazz
.
clazz
- the target class.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokevirtual(java.lang.String classname, java.lang.String name, java.lang.String desc)
The specified method must not be an inherited method.
It must be directly declared in the class specified
in classname
.
classname
- the fully-qualified class name.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokevirtual(int clazz, java.lang.String name, java.lang.String desc)
The specified method must not be an inherited method.
It must be directly declared in the class specified
by clazz
.
clazz
- the index of CONSTANT_Class_info
structure.name
- the method namedesc
- the descriptor of the method signature.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokeinterface(CtClass clazz, java.lang.String name, CtClass returnType, CtClass[] paramTypes, int count)
clazz
- the target class.name
- the method namereturnType
- the return type.paramTypes
- the parameter types.count
- the count operand of the instruction.public void addInvokeinterface(CtClass clazz, java.lang.String name, java.lang.String desc, int count)
clazz
- the target class.name
- the method namedesc
- the descriptor of the method signature.count
- the count operand of the instruction.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokeinterface(java.lang.String classname, java.lang.String name, java.lang.String desc, int count)
classname
- the fully-qualified class name.name
- the method namedesc
- the descriptor of the method signature.count
- the count operand of the instruction.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokeinterface(int clazz, java.lang.String name, java.lang.String desc, int count)
clazz
- the index of CONSTANT_Class_info
structure.name
- the method namedesc
- the descriptor of the method signature.count
- the count operand of the instruction.Descriptor.ofMethod(CtClass,CtClass[])
public void addInvokedynamic(int bootstrap, java.lang.String name, java.lang.String desc)
bootstrap
- an index into the bootstrap_methods
array
of the bootstrap method table.name
- the method name.desc
- the method descriptor.Descriptor.ofMethod(CtClass,CtClass[])
public void addLdc(java.lang.String s)
String
object.s
- the character string pushed by LDC or LDC_W.public void addLdc(int i)
i
- index into the constant pool.public void addLdc2w(long l)
public void addLdc2w(double d)
public void addNew(CtClass clazz)
clazz
- the class of the created instance.public void addNew(java.lang.String classname)
classname
- the fully-qualified class name.public void addAnewarray(java.lang.String classname)
classname
- the qualified class name of the element type.public void addAnewarray(CtClass clazz, int length)
clazz
- the elememnt type.length
- the array length.public void addNewarray(int atype, int length)
atype
- T_BOOLEAN
, T_CHAR
, ...Opcode
public int addMultiNewarray(CtClass clazz, int[] dimensions)
clazz
- the array type.dimensions
- the sizes of all dimensions.dimensions
.public int addMultiNewarray(CtClass clazz, int dim)
clazz
- the array type.dim
- the number of the dimensions.dim
.public int addMultiNewarray(java.lang.String desc, int dim)
desc
- the type descriptor of the created array.dim
- dimensions.dim
.public void addPutfield(CtClass c, java.lang.String name, java.lang.String desc)
c
- the target class.name
- the field name.desc
- the descriptor of the field type.public void addPutfield(java.lang.String classname, java.lang.String name, java.lang.String desc)
classname
- the fully-qualified name of the target class.name
- the field name.desc
- the descriptor of the field type.public void addPutstatic(CtClass c, java.lang.String name, java.lang.String desc)
c
- the target class.name
- the field name.desc
- the descriptor of the field type.public void addPutstatic(java.lang.String classname, java.lang.String fieldName, java.lang.String desc)
classname
- the fully-qualified name of the target class.fieldName
- the field name.desc
- the descriptor of the field type.public void addReturn(CtClass type)
type
- the return type.public void addRet(int var)
var
- local variablepublic void addPrintln(java.lang.String message)
java.lang.System.println(message)
.message
- printed message.public final int getSize()
public final byte[] copy()
public void add(int b1, int b2)
public void add(int b1, int b2, int b3, int b4)
Javassist, a Java-bytecode translator toolkit.
Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.