TechTrader Bytecode Toolkit

com.techtrader.modules.tools.bytecode
Class ConstantInstruction

java.lang.Object
  |
  +--com.techtrader.modules.tools.bytecode.Instruction
        |
        +--com.techtrader.modules.tools.bytecode.ConstantInstruction

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).

Author:
Abe White

Fields inherited from class com.techtrader.modules.tools.bytecode.Instruction
_byteIndex, _opcode, _opcodeTypes, _owner
 
Constructor Summary
protected ConstantInstruction(Code owner)
           
protected ConstantInstruction(Code owner, int opcode, Object value)
           
 
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)
          ConstantInstructions are equal if the const they reference is the same, or if the const of either is unset.
 Object getConstant()
          Return the constant value as an Object; will be an instance of String, Integer, Float, Double, or Long, as necessary.
 Class getConstantType()
          Return the class of constant this instruction references.
 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.
 String getStringConstant()
          Get the constant to load, for String constants.
protected  void readData(DataInput in)
          Read the arguments for this opcode from the given stream.
 ConstantInstruction setConstant(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(String value)
          Set the constant to load, for String constants.
protected  void writeData(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
 

Constructor Detail

ConstantInstruction

protected ConstantInstruction(Code owner)

ConstantInstruction

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

setConstant

public ConstantInstruction setConstant(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.
Returns:
this Instruction, for method chaining

getConstant

public 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 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 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(String value)
Set the constant to load, for String constants.
Returns:
this Instruction, for method chaining

getStringConstant

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

setIntConstant

public ConstantInstruction setIntConstant(int value)
Set the constant to load, for int constants.
Returns:
this Instruction, for method chaining

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.
Returns:
this Instruction, for method chaining

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.
Returns:
this Instruction, for method chaining

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.
Returns:
this Instruction, for method chaining

getDoubleConstant

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

equals

public boolean equals(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
Tags copied from class: Instruction
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

copy

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

readData

protected void readData(DataInput in)
                 throws 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(DataOutput out)
                  throws 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

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.
Overrides:
acceptVisit in class Instruction

TechTrader Bytecode Toolkit