TechTrader Bytecode Toolkit

com.techtrader.modules.tools.bytecode
Class Instruction

java.lang.Object
  |
  +--com.techtrader.modules.tools.bytecode.Instruction
Direct Known Subclasses:
ArrayInstruction, ClassInstruction, CmpInstruction, ConstantInstruction, ConvertInstruction, FieldInstruction, JumpInstruction, LocalVariableInstruction, MathInstruction, MethodInstruction, MonitorInstruction, NewArrayInstruction, ReturnInstruction, StackInstruction

public class Instruction
extends Object
implements Constants, VisitAcceptor

An Instruction represents an opcode in a method of a Class.

Author:
Abe White

Field Summary
protected  int _byteIndex
           
protected  int _opcode
           
protected static List _opcodeTypes
           
protected  Code _owner
           
 
Fields inherited from interface com.techtrader.modules.tools.bytecode.Constants
AALOAD, AASTORE, ACCESS_ABSTRACT, ACCESS_FINAL, ACCESS_INTERFACE, ACCESS_NATIVE, ACCESS_PRIVATE, ACCESS_PROTECTED, ACCESS_PUBLIC, ACCESS_STATIC, ACCESS_STRICT, ACCESS_SUPER, ACCESS_SYNCHRONIZED, ACCESS_TRANSIENT, ACCESS_VOLATILE, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ARETURN, ARRAY_BOOLEAN, ARRAY_BYTE, ARRAY_CHAR, ARRAY_DOUBLE, ARRAY_FLOAT, ARRAY_INT, ARRAY_LONG, ARRAY_SHORT, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_CODE, ATTR_CONST, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNERCLASS, ATTR_LINENUMBERS, ATTR_LOCALS, ATTR_SOURCE, ATTR_SYNTHETIC, ATTR_UNKNOWN, 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_EQ, IF_GE, IF_GT, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IF_LE, IF_LT, IF_NE, IF_NONNULL, IF_NULL, IINC, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMUL, INEG, INSTANCEOF, 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, MATH_ADD, MATH_AND, MATH_DIV, MATH_MUL, MATH_NEG, MATH_OR, MATH_REM, MATH_SHL, MATH_SHR, MATH_SUB, MATH_USHR, MATH_XOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, OPCODE_NAMES, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, TABLESWITCH, VALID_MAGIC, WIDE
 
Constructor Summary
protected Instruction(Code owner)
          Protected constructor.
 
Method Summary
 void acceptVisit(BCVisitor visit)
          Accept a visit from a BCVisitor, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this object.
protected  void copy(Instruction orig)
           
 boolean equals(Object other)
          Instructions are equal if their opcodes are the same.
 int getByteIndex()
          Get the index in the method code byte block at which this opcode starts.
 int getLength()
          Return the length in bytes of this opcode, including all arguments.
 String getName()
          Get the name of this opcode.
 int getOpCode()
          Get the opcode this instruction represents.
 Code getOwner()
          Get the Code block that owns this Instruction.
 int getStackChange()
          Return the number of stack positions this instruction pushes or pops during its execution.
protected  void invalidate()
          Used when the Instruction is removed from the code block so that it can no longer affect the constant pool.
protected  void readData(DataInput in)
          Read the arguments for this opcode from the given stream.
 void setByteIndex(int index)
          Set the index in the method code byte block at which this opcode starts.
protected  void setOpCode(int opcode)
          Set the opcode this instruction represents.
protected  void writeData(DataOutput out)
          Write the arguments for this opcode to the given stream.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_opcodeTypes

protected static final List _opcodeTypes

_owner

protected Code _owner

_opcode

protected int _opcode

_byteIndex

protected int _byteIndex
Constructor Detail

Instruction

protected Instruction(Code owner)
Protected constructor.
Method Detail

getOwner

public Code getOwner()
Get the Code block that owns this Instruction.

invalidate

protected void invalidate()
Used when the Instruction is removed from the code block so that it can no longer affect the constant pool.

getName

public String getName()
Get the name of this opcode.

getOpCode

public int getOpCode()
Get the opcode this instruction represents.

setOpCode

protected void setOpCode(int opcode)
Set the opcode this instruction represents.

setByteIndex

public void setByteIndex(int index)
Set the index in the method code byte block at which this opcode starts. Some opcodes rely on knowing where they appear in the method block to be able to calculate their byte representations; therefore, this method must be called before getLength(), readData(), or writeData().

getByteIndex

public int getByteIndex()
Get the index in the method code byte block at which this opcode starts.

getLength

public int getLength()
Return the length in bytes of this opcode, including all arguments. This method should be overridden by opcodes that take arguments.

getStackChange

public int getStackChange()
Return the number of stack positions this instruction pushes or pops during its execution.
Returns:
0 if the stack is not affected by this instruction, a positive number if it pushes onto the stack, and a negative number if it pops from the stack

equals

public boolean equals(Object other)
Instructions are equal if their opcodes are the same. Subclasses should override this method to perform a template comparison: Instructions should compare equal to other Instructions of the same type where the data is either the same or the data is unset.
Overrides:
equals in class Object

copy

protected void copy(Instruction orig)

readData

protected void readData(DataInput in)
                 throws IOException
Read the arguments for this opcode from the given stream. This method should be overridden by opcodes that take arguments.

writeData

protected void writeData(DataOutput out)
                  throws IOException
Write the arguments for this opcode to the given stream. This method should be overridden by opcodes that take arguments.

acceptVisit

public void acceptVisit(BCVisitor visit)
Description copied from interface: VisitAcceptor
Accept a visit from a BCVisitor, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this object.
Specified by:
acceptVisit in interface VisitAcceptor

TechTrader Bytecode Toolkit