org.aspectj.apache.bcel.generic
Class Instruction

java.lang.Object
  extended by org.aspectj.apache.bcel.generic.Instruction
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Constants
Direct Known Subclasses:
InstructionBranch, InstructionByte, InstructionCP, InstructionLV, InstructionShort, RET

public class Instruction
extends java.lang.Object
implements java.lang.Cloneable, java.io.Serializable, Constants

Abstract super class for all Java byte codes.

See Also:
Serialized Form

Field Summary
 short opcode
           
 
Fields inherited from interface org.aspectj.apache.bcel.Constants
_unused, AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_BOOTSTRAPMETHODS, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_ENCLOSING_METHOD, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_LOCAL_VARIABLE_TYPE_TABLE, ATTR_PMG, ATTR_RUNTIME_INVISIBLE_ANNOTATIONS, ATTR_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIME_VISIBLE_ANNOTATIONS, ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BRANCH_INSTRUCTION, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_INST, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_Methodref, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, CP_INST, 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, EXCEPTION_THROWER, 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, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, 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, IF_INST, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, iLen, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INDEXED, INEG, INSTANCEOF, INSTANCEOF_QUICK, instExcs, instFlags, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_INSTRUCTION, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOAD_INST, LOADCLASS_INST, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LV_INST, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAJOR_1_6, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MINOR_1_6, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEGATABLE, NEW, NEW_QUICK, NEWARRAY, NOP, OPCODE_NAMES, POP, POP_INST, POP2, PUSH, PUSH_INST, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RET_INST, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STACK_INST, stackEntriesProduced, STATIC_INITIALIZER_NAME, STORE_INST, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TARGETER_INSTRUCTION, TYPE_NAMES, TYPE_OF_OPERANDS, types, UNDEFINED, UNDEFINED_LENGTH, UNPREDICTABLE, VARIABLE_LENGTH, WIDE
 
Constructor Summary
Instruction(short opcode)
           
 
Method Summary
 int consumeStack(ConstantPool cpg)
           
 Instruction copy()
          Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are).
 void dump(java.io.DataOutputStream out)
           
 boolean equals(java.lang.Object other)
           
 int getIndex()
           
 int getLength()
           
 ObjectType getLoadClassType(ConstantPool cpg)
           
 java.lang.String getName()
           
 short getOpcode()
           
 Type getType()
           
 Type getType(ConstantPool cp)
           
 java.lang.Number getValue()
           
 java.lang.Object getValue(ConstantPool cpg)
           
 int hashCode()
           
 boolean isALOAD()
           
 boolean isArrayCreationInstruction()
           
 boolean isASTORE()
           
 boolean isConstantInstruction()
           
 boolean isConstantPoolInstruction()
           
 boolean isIndexedInstruction()
           
 boolean isJsrInstruction()
           
 boolean isLoadInstruction()
           
 boolean isLocalVariableInstruction()
           
 boolean isReturnInstruction()
           
 boolean isStackConsumer()
           
 boolean isStackProducer()
           
 boolean isStoreInstruction()
           
 int produceStack(ConstantPool cpg)
           
static Instruction readInstruction(ByteSequence bytes)
          Read an instruction bytecode from an input stream and return the appropriate object.
 void setIndex(int i)
           
 java.lang.String toString()
           
 java.lang.String toString(boolean verbose)
          Long output format: 'name of opcode' "[" 'opcode number' "]" "(" 'length of instruction' ")"
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

opcode

public short opcode
Constructor Detail

Instruction

public Instruction(short opcode)
Method Detail

dump

public void dump(java.io.DataOutputStream out)
          throws java.io.IOException
Throws:
java.io.IOException

getName

public java.lang.String getName()

copy

public final Instruction copy()
Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are). This also applies for 'Select' instructions with their multiple branch targets.

Returns:
(shallow) copy of an instruction

readInstruction

public static final Instruction readInstruction(ByteSequence bytes)
                                         throws java.io.IOException
Read an instruction bytecode from an input stream and return the appropriate object.

Parameters:
file - file to read from
Returns:
instruction object being read
Throws:
java.io.IOException

consumeStack

public int consumeStack(ConstantPool cpg)
Returns:
Number of words consumed from stack by this instruction, or Constants.UNPREDICTABLE, if this can not be computed statically

produceStack

public int produceStack(ConstantPool cpg)
Returns:
Number of words produced onto stack by this instruction, or Constants.UNPREDICTABLE, if this can not be computed statically

getOpcode

public short getOpcode()

getLength

public int getLength()

equals

public boolean equals(java.lang.Object other)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

getType

public Type getType()

getType

public Type getType(ConstantPool cp)

getValue

public java.lang.Number getValue()

getIndex

public int getIndex()

setIndex

public void setIndex(int i)

getValue

public java.lang.Object getValue(ConstantPool cpg)

isLoadInstruction

public boolean isLoadInstruction()

isASTORE

public boolean isASTORE()

isALOAD

public boolean isALOAD()

isStoreInstruction

public boolean isStoreInstruction()

isJsrInstruction

public boolean isJsrInstruction()

isConstantInstruction

public boolean isConstantInstruction()

isConstantPoolInstruction

public boolean isConstantPoolInstruction()

isStackProducer

public boolean isStackProducer()

isStackConsumer

public boolean isStackConsumer()

isIndexedInstruction

public boolean isIndexedInstruction()

isArrayCreationInstruction

public boolean isArrayCreationInstruction()

getLoadClassType

public ObjectType getLoadClassType(ConstantPool cpg)

isReturnInstruction

public boolean isReturnInstruction()

isLocalVariableInstruction

public boolean isLocalVariableInstruction()

toString

public java.lang.String toString(boolean verbose)
Long output format: 'name of opcode' "[" 'opcode number' "]" "(" 'length of instruction' ")"


toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object