Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

com.techtrader.modules.tools.bytecode
Class ConstantInstruction  view ConstantInstruction download ConstantInstruction.java

java.lang.Object
  extended bycom.techtrader.modules.tools.bytecode.Instruction
      extended bycom.techtrader.modules.tools.bytecode.ConstantInstruction
All Implemented Interfaces:
Constants, com.techtrader.modules.tools.bytecode.visitor.VisitAcceptor

public class ConstantInstruction
extends Instruction

Represents an instruction that that loads a constant onto the stack. The opcode represented by this Instruction may change depending on the type and value of the constant set. For example, if the constant value is initially set to '5', the opcode will be iconst_5; if later incremented to '6', the opcode will be changed to bipush(6).


Field Summary
private  int _arg
           
private  java.lang.Object _value
           
 
Fields inherited from class com.techtrader.modules.tools.bytecode.Instruction
_byteIndex, _opcode, _opcodeTypes, _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 ConstantInstruction(Code owner)
           
protected ConstantInstruction(Code owner, int opcode, java.lang.Object value)
           
 
Method Summary
 void acceptVisit(com.techtrader.modules.tools.bytecode.visitor.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.
private  void calculateOpCode()
          Helper method to calculate the optimal opcode for the constant to be pushed onto the stack.
protected  void copy(Instruction orig)
           
 boolean equals(java.lang.Object other)
          ConstantInstructions are equal if the const they reference is the same, or if the const of either is unset.
 java.lang.Object getConstant()
          Return the constant value as an Object; will be an instance of String, Integer, Float, Double, or Long, as necessary.
 java.lang.Class getConstantType()
          Return the class of constant this instruction references.
 java.lang.String getConstantTypeName()
          Return the class of constant this instruction references.
 double getDoubleConstant()
          Get the constant to double, for float constants; must be a ldc2 instruction.
 float getFloatConstant()
          Get the constant to load, for float constants.
 int getIntConstant()
          Get the constant to load, for int constants.
 int getLength()
          Return the length in bytes of this opcode, including all arguments.
 long getLongConstant()
          Get the constant to load, for float constants; must be a ldc2 instruction.
 int getStackChange()
          Return the number of stack positions this instruction pushes or pops during its execution.
 java.lang.String getStringConstant()
          Get the constant to load, for String constants.
protected  void readData(java.io.DataInput in)
          Read the arguments for this opcode from the given stream.
 ConstantInstruction setConstant(java.lang.Object value)
          Set the constant to the given Object value.
 ConstantInstruction setDoubleConstant(double value)
          Set the constant to load, for double constants; must be a ldc2 instruction.
 ConstantInstruction setFloatConstant(float value)
          Set the constant to load, for float constants.
 ConstantInstruction setIntConstant(int value)
          Set the constant to load, for int constants.
 ConstantInstruction setLongConstant(long value)
          Set the constant to load, for long constants; must be a ldc2 instruction.
 ConstantInstruction setStringConstant(java.lang.String value)
          Set the constant to load, for String constants.
protected  void writeData(java.io.DataOutput out)
          Write the arguments for this opcode to the given stream.
 
Methods inherited from class com.techtrader.modules.tools.bytecode.Instruction
getByteIndex, getName, getOpCode, getOwner, invalidate, setByteIndex, setOpCode
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_value

private java.lang.Object _value

_arg

private int _arg
Constructor Detail

ConstantInstruction

protected ConstantInstruction(Code owner)

ConstantInstruction

protected ConstantInstruction(Code owner,
                              int opcode,
                              java.lang.Object value)
Method Detail

setConstant

public ConstantInstruction setConstant(java.lang.Object value)
Set the constant to the given Object value. The Object should be an instance of String, Integer, Long, Double, or Float depending on the constant type.


getConstant

public java.lang.Object getConstant()
Return the constant value as an Object; will be an instance of String, Integer, Float, Double, or Long, as necessary. Returns null if the constant has not been set, or if this represents the aconst_null opcode.


getConstantType

public java.lang.Class getConstantType()
Return the class of constant this instruction references. Will return one of: Object.class, String.class, int.class, long.class, double.class, float.class.


getConstantTypeName

public java.lang.String getConstantTypeName()
Return the class of constant this instruction references. Will return one of: java.lang.Object, java.lang.String, int, long, double, float.


setStringConstant

public ConstantInstruction setStringConstant(java.lang.String value)
Set the constant to load, for String constants.


getStringConstant

public java.lang.String getStringConstant()
Get the constant to load, for String constants.


setIntConstant

public ConstantInstruction setIntConstant(int value)
Set the constant to load, for int constants.


getIntConstant

public int getIntConstant()
Get the constant to load, for int constants.


setFloatConstant

public ConstantInstruction setFloatConstant(float value)
Set the constant to load, for float constants.


getFloatConstant

public float getFloatConstant()
Get the constant to load, for float constants.


setLongConstant

public ConstantInstruction setLongConstant(long value)
Set the constant to load, for long constants; must be a ldc2 instruction.


getLongConstant

public long getLongConstant()
Get the constant to load, for float constants; must be a ldc2 instruction.


setDoubleConstant

public ConstantInstruction setDoubleConstant(double value)
Set the constant to load, for double constants; must be a ldc2 instruction.


getDoubleConstant

public double getDoubleConstant()
Get the constant to double, for float constants; must be a ldc2 instruction.


equals

public boolean equals(java.lang.Object other)
ConstantInstructions are equal if the const they reference is the same, or if the const of either is unset.

Overrides:
equals in class Instruction

getLength

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

Overrides:
getLength in class Instruction

getStackChange

public int getStackChange()
Description copied from class: Instruction
Return the number of stack positions this instruction pushes or pops during its execution.

Overrides:
getStackChange in class Instruction

copy

protected void copy(Instruction orig)
Overrides:
copy in class Instruction

readData

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

Overrides:
readData in class Instruction

writeData

protected void writeData(java.io.DataOutput out)
                  throws java.io.IOException
Description copied from class: Instruction
Write the arguments for this opcode to the given stream. This method should be overridden by opcodes that take arguments.

Overrides:
writeData in class Instruction

calculateOpCode

private void calculateOpCode()
Helper method to calculate the optimal opcode for the constant to be pushed onto the stack.


acceptVisit

public void acceptVisit(com.techtrader.modules.tools.bytecode.visitor.BCVisitor visit)
Description copied from interface: com.techtrader.modules.tools.bytecode.visitor.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 com.techtrader.modules.tools.bytecode.visitor.VisitAcceptor
Overrides:
acceptVisit in class Instruction