|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.cojen.classfile.AbstractCodeAssembler
org.cojen.classfile.CodeBuilder
public class CodeBuilder
This class is used as an aid in generating code for a method. It controls the max stack, local variable allocation, labels and bytecode.
| Field Summary |
|---|
| Fields inherited from interface org.cojen.classfile.CodeAssembler |
|---|
CONVERT_FP_BITS, CONVERT_FP_NORMAL, CONVERT_FP_RAW_BITS |
| Constructor Summary | |
|---|---|
CodeBuilder(MethodInfo info)
Construct a CodeBuilder for the CodeAttr of the given MethodInfo. |
|
CodeBuilder(MethodInfo info,
boolean saveLineNumberInfo,
boolean saveLocalVariableInfo)
Construct a CodeBuilder for the CodeAttr of the given MethodInfo. |
|
| Method Summary | |
|---|---|
void |
arrayLength()
Generates code for an arraylength instruction. |
void |
branch(Location location)
Generates code that performs an unconditional branch to the specified location. |
void |
breakpoint()
Generates a breakpoint instruction for use in a debugging environment. |
void |
checkCast(TypeDesc type)
Generates code that performs an object cast operation. |
void |
convert(TypeDesc fromType,
TypeDesc toType)
Generates code that converts the value of a primitive type already on the stack. |
void |
convert(TypeDesc fromType,
TypeDesc toType,
int fpConvertMode)
Generates code that converts the value of a primitive type already on the stack. |
Label |
createLabel()
Creates a label, whose location must be set. |
LocalVariable |
createLocalVariable(String name,
TypeDesc type)
Creates a LocalVariable reference from a name and type. |
void |
dup()
Generates code for the dup instruction. |
void |
dup2()
Generates code for the dup2 instruction. |
void |
dup2X1()
Generates code for the dup2_x1 instruction. |
void |
dup2X2()
Generates code for the dup2_x2 instruction. |
void |
dupX1()
Generates code for the dup_x1 instruction. |
void |
dupX2()
Generates code for the dup_x2 instruction. |
void |
exceptionHandler(Location startLocation,
Location endLocation,
String catchClassName)
Sets up an exception handler located here, the location of the next code to be generated. |
byte[] |
getByteCodes()
|
ExceptionHandler[] |
getExceptionHandlers()
|
int |
getMaxLocals()
|
int |
getMaxStackDepth()
|
LocalVariable |
getParameter(int index)
Returns a specific parameter, whose index lies within 0 to getParameterCount() - 1. |
int |
getParameterCount()
Returns the amount of parameters that are accepted by the method being built, not including any "this" reference. |
void |
ifComparisonBranch(Location location,
String choice)
Generates code the performs a conditional branch based on a comparison between two int values on the stack. |
void |
ifEqualBranch(Location location,
boolean choice)
Generates code that performs a conditional branch based on the value of two object references on the stack. |
void |
ifNullBranch(Location location,
boolean choice)
Generates code that performs a conditional branch based on the value of an object on the stack. |
void |
ifZeroComparisonBranch(Location location,
String choice)
Generates code the performs a conditional branch based on a comparison between an int value on the stack and zero. |
void |
instanceOf(TypeDesc type)
Generates code that performs an instanceof operation. |
void |
integerIncrement(LocalVariable local,
int amount)
Generates code that increments a local integer variable by a signed constant amount. |
void |
invokeConstructor(String className,
TypeDesc[] params)
Generates code to invoke a class constructor in any class. |
void |
invokeConstructor(TypeDesc[] params)
Generates code to invoke a class constructor in this class. |
void |
invokeConstructor(TypeDesc classDesc,
TypeDesc[] params)
Generates code to invoke a class constructor in any class. |
void |
invokeInterface(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke an interface method in any class. |
void |
invokeInterface(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke an interface method in any class. |
void |
invokePrivate(String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a private method in this class. |
void |
invokeStatic(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a static method in any class. |
void |
invokeStatic(String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a static method in this class. |
void |
invokeStatic(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a static method in any class. |
void |
invokeSuper(String superClassName,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a method in the super class. |
void |
invokeSuper(TypeDesc superClassDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a method in the super class. |
void |
invokeSuperConstructor(TypeDesc[] params)
Generates code to invoke a super class constructor. |
void |
invokeVirtual(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a virtual method in any class. |
void |
invokeVirtual(String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a virtual method in this class. |
void |
invokeVirtual(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
Generates code to invoke a virtual method in any class. |
void |
jsr(Location location)
Generates code that performs a subroutine branch to the specified location. |
void |
loadConstant(boolean value)
Generates code that loads a constant boolean value onto the stack. |
void |
loadConstant(double value)
Generates code that loads a constant double value onto the stack. |
void |
loadConstant(float value)
Generates code that loads a constant float value onto the stack. |
void |
loadConstant(int value)
Generates code that loads a constant int, char, short or byte value onto the stack. |
void |
loadConstant(long value)
Generates code that loads a constant long value onto the stack. |
void |
loadConstant(String value)
Generates code that loads a constant string value onto the stack. |
void |
loadConstant(TypeDesc type)
Generates code that loads a constant class value onto the stack. |
void |
loadField(String className,
String fieldName,
TypeDesc type)
Generates code that loads a value from a field from any class. |
void |
loadField(String fieldName,
TypeDesc type)
Generates code that loads a value from a field from this class. |
void |
loadField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
Generates code that loads a value from a field from any class. |
void |
loadFromArray(TypeDesc type)
Generates code that loads a value from an array. |
void |
loadLocal(LocalVariable local)
Generates code that loads a local variable onto the stack. |
void |
loadNull()
Generates code that loads a null reference onto the stack. |
void |
loadStaticField(String className,
String fieldName,
TypeDesc type)
Generates code that loads a value from a static field from any class. |
void |
loadStaticField(String fieldName,
TypeDesc type)
Generates code that loads a value from a static field from this class. |
void |
loadStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
Generates code that loads a value from a static field from any class. |
void |
loadThis()
Loads a reference to "this" onto the stack. |
void |
mapLineNumber(int lineNumber)
Map the location of the next code to be generated to a line number in source code. |
void |
math(byte opcode)
Generates code for either a unary or binary math operation on one or two values pushed on the stack. |
void |
monitorEnter()
Generates code to enter the monitor on an object loaded on the stack. |
void |
monitorExit()
Generates code to exit the monitor on an object loaded on the stack. |
void |
newObject(TypeDesc type)
Generates code to create a new object. |
void |
newObject(TypeDesc type,
int dimensions)
Generates code to create a new array. |
void |
nop()
Generates an instruction that does nothing. |
void |
pop()
Generates code for the pop instruction. |
void |
pop2()
Generates code for the pop2 instruction. |
void |
ret(LocalVariable local)
Generates code that returns from a subroutine invoked by jsr. |
void |
returnValue(TypeDesc type)
Generates code that returns an object or primitive type. |
void |
returnVoid()
Generates code that returns void. |
void |
storeField(String className,
String fieldName,
TypeDesc type)
Generates code that stores a value into a field from any class. |
void |
storeField(String fieldName,
TypeDesc type)
Generates code that stores a value into a field from this class. |
void |
storeField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
Generates code that stores a value into a field from any class. |
void |
storeLocal(LocalVariable local)
Generates code that pops a value off of the stack into a local variable. |
void |
storeStaticField(String className,
String fieldName,
TypeDesc type)
Generates code that stores a value into a field from any class. |
void |
storeStaticField(String fieldName,
TypeDesc type)
Generates code that stores a value into a field from this class. |
void |
storeStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
Generates code that stores a value into a field from any class. |
void |
storeToArray(TypeDesc type)
Generates code that stores a value to an array. |
void |
swap()
Generates code for the swap instruction. |
void |
swap2()
Generates code for a swap2 instruction. |
void |
switchBranch(int[] cases,
Location[] locations,
Location defaultLocation)
Generates code for a switch statement. |
void |
throwObject()
Generates code that throws an exception. |
| Methods inherited from class org.cojen.classfile.AbstractCodeAssembler |
|---|
ifComparisonBranch, inline, invoke, invoke, invokeSuper |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface org.cojen.classfile.CodeAssembler |
|---|
ifComparisonBranch, inline, invoke, invoke, invokeSuper |
| Constructor Detail |
|---|
public CodeBuilder(MethodInfo info)
public CodeBuilder(MethodInfo info,
boolean saveLineNumberInfo,
boolean saveLocalVariableInfo)
saveLineNumberInfo - When set false, all calls to mapLineNumber
are ignored. By default, this value is true.saveLocalVariableInfo - When set true, all local variable
usage information is saved in the ClassFile. By default, this value
is false.mapLineNumber(int)| Method Detail |
|---|
public int getMaxStackDepth()
getMaxStackDepth in interface CodeBufferpublic int getMaxLocals()
getMaxLocals in interface CodeBufferpublic byte[] getByteCodes()
getByteCodes in interface CodeBufferpublic ExceptionHandler[] getExceptionHandlers()
getExceptionHandlers in interface CodeBufferpublic int getParameterCount()
CodeAssembler
getParameterCount in interface CodeAssemblerpublic LocalVariable getParameter(int index)
CodeAssembler
getParameter in interface CodeAssembler
public LocalVariable createLocalVariable(String name,
TypeDesc type)
CodeAssembler
createLocalVariable in interface CodeAssemblername - Optional name for the LocalVariable.type - The type of data that the requested LocalVariable can
store.public Label createLabel()
CodeAssemblerCodeBuilder builder; ... Label label = builder.createLabel().setLocation();
createLabel in interface CodeAssemblerLabel.setLocation()
public void exceptionHandler(Location startLocation,
Location endLocation,
String catchClassName)
CodeAssembler
exceptionHandler in interface CodeAssemblerstartLocation - Location at the start of the section of
code to be wrapped by an exception handler.endLocation - Location directly after the end of the
section of code.catchClassName - The class name of exception to be caught;
if null, then catch every object.public void mapLineNumber(int lineNumber)
CodeAssembler
mapLineNumber in interface CodeAssemblerpublic void loadNull()
CodeAssembler
loadNull in interface CodeAssemblerpublic void loadConstant(String value)
CodeAssembler
loadConstant in interface CodeAssembler
public void loadConstant(TypeDesc type)
throws IllegalStateException
CodeAssembler
loadConstant in interface CodeAssemblertype - any object or primitive type
IllegalStateException - if class file target version does not
support this featurepublic void loadConstant(boolean value)
CodeAssembler
loadConstant in interface CodeAssemblerpublic void loadConstant(int value)
CodeAssembler
loadConstant in interface CodeAssemblerpublic void loadConstant(long value)
CodeAssembler
loadConstant in interface CodeAssemblerpublic void loadConstant(float value)
CodeAssembler
loadConstant in interface CodeAssemblerpublic void loadConstant(double value)
CodeAssembler
loadConstant in interface CodeAssemblerpublic void loadLocal(LocalVariable local)
CodeAssembler
loadLocal in interface CodeAssemblerlocal - The local variable referencepublic void loadThis()
CodeAssembler
loadThis in interface CodeAssemblerpublic void storeLocal(LocalVariable local)
CodeAssembler
storeLocal in interface CodeAssemblerlocal - The local variable referenceCodeAssembler.getParameter(int),
CodeAssembler.createLocalVariable(java.lang.String, org.cojen.classfile.TypeDesc)public void loadFromArray(TypeDesc type)
CodeAssemblerThe type doesn't need to be an exact match for objects. TypeDesc.OBJECT works fine for all objects. For primitive types, use the appropriate TypeDesc. For an int, the type is TypeDesc.INT.
loadFromArray in interface CodeAssemblertype - The type of data stored in the array.public void storeToArray(TypeDesc type)
CodeAssemblerThe type doesn't need to be an exact match for objects. TypeDesc.OBJECT works fine for all objects. For primitive types, use the appropriate TypeDesc. For an int, the type is TypeDesc.INT.
storeToArray in interface CodeAssemblertype - The type of data stored in the array.
public void loadField(String fieldName,
TypeDesc type)
CodeAssembler
loadField in interface CodeAssembler
public void loadField(String className,
String fieldName,
TypeDesc type)
CodeAssembler
loadField in interface CodeAssembler
public void loadField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
CodeAssembler
loadField in interface CodeAssembler
public void loadStaticField(String fieldName,
TypeDesc type)
CodeAssembler
loadStaticField in interface CodeAssembler
public void loadStaticField(String className,
String fieldName,
TypeDesc type)
CodeAssembler
loadStaticField in interface CodeAssembler
public void loadStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
CodeAssembler
loadStaticField in interface CodeAssembler
public void storeField(String fieldName,
TypeDesc type)
CodeAssembler
storeField in interface CodeAssembler
public void storeField(String className,
String fieldName,
TypeDesc type)
CodeAssembler
storeField in interface CodeAssembler
public void storeField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
CodeAssembler
storeField in interface CodeAssembler
public void storeStaticField(String fieldName,
TypeDesc type)
CodeAssembler
storeStaticField in interface CodeAssembler
public void storeStaticField(String className,
String fieldName,
TypeDesc type)
CodeAssembler
storeStaticField in interface CodeAssembler
public void storeStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type)
CodeAssembler
storeStaticField in interface CodeAssemblerpublic void returnVoid()
CodeAssembler
returnVoid in interface CodeAssemblerpublic void returnValue(TypeDesc type)
CodeAssemblerThe type doesn't need to be an exact match for objects. TypeDesc.OBJECT works fine for all objects. For primitive types, use the appropriate TypeDesc. For an int, the type is TypeDesc.INT.
returnValue in interface CodeAssembler
public void convert(TypeDesc fromType,
TypeDesc toType)
CodeAssemblerint to char byte to double Double to double Float to boolean long to Long Double to ShortIn all, 240 conversions are supported.
convert in interface CodeAssembler
public void convert(TypeDesc fromType,
TypeDesc toType,
int fpConvertMode)
CodeAssemblerint to char byte to double Double to double Float to boolean long to Long Double to ShortIn all, 240 conversions are supported.
convert in interface CodeAssemblerfpConvertMode - controls floating point conversion if converting
float <--> int or double <--> long
public void invokeVirtual(String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeVirtual in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeVirtual(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeVirtual in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeVirtual(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeVirtual in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeStatic(String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeStatic in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeStatic(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeStatic in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeStatic(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeStatic in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeInterface(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeInterface in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeInterface(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeInterface in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokePrivate(String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokePrivate in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeSuper(String superClassName,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeSuper in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.
public void invokeSuper(TypeDesc superClassDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params)
CodeAssembler
invokeSuper in interface CodeAssemblerret - May be null if method returns void.params - May be null if method takes no parameters.public void invokeConstructor(TypeDesc[] params)
CodeAssembler
invokeConstructor in interface CodeAssemblerparams - May be null if constructor takes no parameters.
public void invokeConstructor(String className,
TypeDesc[] params)
CodeAssembler
invokeConstructor in interface CodeAssemblerparams - May be null if constructor takes no parameters.
public void invokeConstructor(TypeDesc classDesc,
TypeDesc[] params)
CodeAssembler