Class InstructionFactory
java.lang.Object
org.apache.bcel.generic.InstructionFactory
- All Implemented Interfaces:
InstructionConstants
Instances of this class may be used, for example, to generate typed versions of instructions. Its main purpose is to be used
as the byte code generating backend of a compiler. You can subclass it to add your own create methods.
Note: The static createXXX methods return singleton instances from the InstructionConst class.
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface InstructionConstants
InstructionConstants.Clinit -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ClassGenDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected ConstantPoolGenDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterFields inherited from interface InstructionConstants
AALOAD, AASTORE, ACONST_NULL, ALOAD_0, ALOAD_1, ALOAD_2, ARETURN, ARRAYLENGTH, ASTORE_0, ASTORE_1, ASTORE_2, ATHROW, BALOAD, BASTORE, bla, CALOAD, CASTORE, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DMUL, DNEG, DREM, DRETURN, 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, FMUL, FNEG, FREM, FRETURN, FSUB, 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, ILOAD_0, ILOAD_1, ILOAD_2, IMUL, INEG, INSTRUCTIONS, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE_0, ISTORE_1, ISTORE_2, ISUB, IUSHR, IXOR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDIV, LMUL, LNEG, LOR, LREM, LRETURN, LSHL, LSHR, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, NOP, POP, POP2, RETURN, SALOAD, SASTORE, SWAP, THIS -
Constructor Summary
ConstructorsConstructorDescriptionInitialize with ClassGen object.Constructs an InstructionFactory.Initialize just with ConstantPoolGen object. -
Method Summary
Modifier and TypeMethodDescriptioncreateAppend(Type type) Creates an append instruction for the given type.static ArrayInstructioncreateArrayLoad(Type type) Creates an array load instruction for the given type.static ArrayInstructioncreateArrayStore(Type type) Creates an array store instruction for the given type.static ArithmeticInstructioncreateBinaryOperation(String op, Type type) Create binary operation for simple basic types, such as int and float.static BranchInstructioncreateBranchInstruction(short opcode, InstructionHandle target) Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH.createCast(Type srcType, Type destType) Create conversion operation for two stack operands, this may be an I2C, instruction, for example, if the operands are basic types and CHECKCAST if they are reference types.Creates a CHECKCAST instruction.createConstant(Object value) Uses PUSH to push a constant value onto the stack.static StackInstructioncreateDup(int size) Creates a DUP instruction.static StackInstructioncreateDup_1(int size) Creates a DUP_X1 instruction.static StackInstructioncreateDup_2(int size) Creates a DUP_X2 instruction.createFieldAccess(String className, String name, Type type, short kind) Create a field instruction.createGetField(String className, String name, Type t) Creates a GETFIELD instruction.createGetStatic(String className, String name, Type t) Creates a GETSTATIC instruction.Creates an INSTANCEOF instruction.createInvoke(String className, String name, Type retType, Type[] argTypes, short kind) Create an invoke instruction.createInvoke(String className, String name, Type retType, Type[] argTypes, short kind, boolean useInterface) Create an invoke instruction.static LocalVariableInstructioncreateLoad(Type type, int index) Creates a load instruction for the given type.Creates a NEW instruction.Creates a NEW instruction.createNewArray(Type t, short dim) Create new array of given size and type.static InstructioncreateNull(Type type) Create "null" value for reference types, 0 for basic types like int.static StackInstructioncreatePop(int size) Creates a pop instruction.Create a call to the most popular System.out.println() method.createPutField(String className, String name, Type t) Creates a PUTFIELD instruction.createPutStatic(String className, String name, Type t) Creates a PUTSTATIC instruction.static ReturnInstructioncreateReturn(Type type) Create typed return.static LocalVariableInstructioncreateStore(Type type, int index) Creates a store instruction.static InstructionCreate reference to 'this'.Gets the class generator.Gets the constant pool generator.voidSets the class generator.voidSets the constant pool generator.
-
Field Details
-
cg
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
cp
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter
-
-
Constructor Details
-
InstructionFactory
Initialize with ClassGen object.- Parameters:
cg- the class generator.
-
InstructionFactory
Constructs an InstructionFactory.- Parameters:
cg- the class generator.cp- the constant pool generator.
-
InstructionFactory
Initialize just with ConstantPoolGen object.- Parameters:
cp- the constant pool generator.
-
-
Method Details
-
createArrayLoad
Creates an array load instruction for the given type.- Parameters:
type- type of elements of array, that is, array.getElementType().- Returns:
- the array load instruction.
-
createArrayStore
Creates an array store instruction for the given type.- Parameters:
type- type of elements of array, that is, array.getElementType().- Returns:
- the array store instruction.
-
createBinaryOperation
Create binary operation for simple basic types, such as int and float.- Parameters:
op- operation, such as "+", "*", "<<", etc.type- the operand type.- Returns:
- the binary arithmetic instruction.
-
createBranchInstruction
Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH. For those you should use the SWITCH compound instruction.- Parameters:
opcode- the branch opcode.target- the target instruction handle.- Returns:
- the branch instruction.
-
createDup
Creates a DUP instruction.- Parameters:
size- size of operand, either 1 (int, for example) or 2 (double).- Returns:
- the DUP instruction.
-
createDup_1
Creates a DUP_X1 instruction.- Parameters:
size- size of operand, either 1 (int, for example) or 2 (double).- Returns:
- the DUP instruction.
-
createDup_2
Creates a DUP_X2 instruction.- Parameters:
size- size of operand, either 1 (int, for example) or 2 (double).- Returns:
- the DUP instruction.
-
createLoad
Creates a load instruction for the given type.- Parameters:
type- the variable type.index- index of local variable.- Returns:
- the load instruction.
-
createNull
Create "null" value for reference types, 0 for basic types like int.- Parameters:
type- the type.- Returns:
- the null or zero instruction.
-
createPop
Creates a pop instruction.- Parameters:
size- size of operand, either 1 (int, for example) or 2 (double).- Returns:
- the pop instruction.
-
createReturn
Create typed return.- Parameters:
type- the return type.- Returns:
- the return instruction.
-
createStore
Creates a store instruction.- Parameters:
type- the variable type.index- index of local variable.- Returns:
- the store instruction.
-
createThis
-
createAppend
Creates an append instruction for the given type.- Parameters:
type- the type to append.- Returns:
- the append instruction.
-
createCast
Create conversion operation for two stack operands, this may be an I2C, instruction, for example, if the operands are basic types and CHECKCAST if they are reference types.- Parameters:
srcType- the source type.destType- the destination type.- Returns:
- the conversion instruction.
-
createCheckCast
Creates a CHECKCAST instruction.- Parameters:
t- the reference type.- Returns:
- the CHECKCAST instruction.
-
createConstant
Uses PUSH to push a constant value onto the stack.- Parameters:
value- must be of type Number, Boolean, Character or String.- Returns:
- the instruction.
-
createFieldAccess
Create a field instruction.- Parameters:
className- name of the accessed class.name- name of the referenced field.type- type of field.kind- how to access, that is, GETFIELD, PUTFIELD, GETSTATIC, PUTSTATIC.- See Also:
-
createGetField
Creates a GETFIELD instruction.- Parameters:
className- the class name.name- the field name.t- the field type.- Returns:
- the GETFIELD instruction.
-
createGetStatic
Creates a GETSTATIC instruction.- Parameters:
className- the class name.name- the field name.t- the field type.- Returns:
- the GETSTATIC instruction.
-
createInstanceOf
Creates an INSTANCEOF instruction.- Parameters:
t- the reference type.- Returns:
- the INSTANCEOF instruction.
-
createInvoke
public InvokeInstruction createInvoke(String className, String name, Type retType, Type[] argTypes, short kind) Create an invoke instruction. (Except for invokedynamic.)- Parameters:
className- name of the called class.name- name of the called method.retType- return type of method.argTypes- argument types of method.kind- how to invoke, that is, INVOKEINTERFACE, INVOKESTATIC, INVOKEVIRTUAL, or INVOKESPECIAL.- Returns:
- the invoke instruction.
- See Also:
-
createInvoke
public InvokeInstruction createInvoke(String className, String name, Type retType, Type[] argTypes, short kind, boolean useInterface) Create an invoke instruction. (Except for invokedynamic.)- Parameters:
className- name of the called class.name- name of the called method.retType- return type of method.argTypes- argument types of method.kind- how to invoke: INVOKEINTERFACE, INVOKESTATIC, INVOKEVIRTUAL, or INVOKESPECIAL.useInterface- force use of InterfaceMethodref.- Returns:
- A new InvokeInstruction.
- Since:
- 6.5.0
-
createNew
Creates a NEW instruction.- Parameters:
t- the object type.- Returns:
- the NEW instruction.
-
createNew
-
createNewArray
Create new array of given size and type.- Parameters:
t- the array element type.dim- the array dimensions.- Returns:
- an instruction that creates the corresponding array at runtime, for example is an AllocationInstruction.
-
createPrintln
Create a call to the most popular System.out.println() method.- Parameters:
s- the string to print.- Returns:
- the instruction list.
-
createPutField
Creates a PUTFIELD instruction.- Parameters:
className- the class name.name- the field name.t- the field type.- Returns:
- the PUTFIELD instruction.
-
createPutStatic
Creates a PUTSTATIC instruction.- Parameters:
className- the class name.name- the field name.t- the field type.- Returns:
- the PUTSTATIC instruction.
-
getClassGen
-
getConstantPool
Gets the constant pool generator.- Returns:
- the constant pool generator.
-
setClassGen
-
setConstantPool
Sets the constant pool generator.- Parameters:
c- the constant pool generator.
-