Class Instruction

java.lang.Object
org.apache.bcel.generic.Instruction
All Implemented Interfaces:
Cloneable
Direct Known Subclasses:
ACONST_NULL, ArithmeticInstruction, ArrayInstruction, ARRAYLENGTH, ATHROW, BIPUSH, BranchInstruction, BREAKPOINT, ConversionInstruction, CPInstruction, DCMPG, DCMPL, DCONST, FCMPG, FCMPL, FCONST, ICONST, IMPDEP1, IMPDEP2, LCMP, LCONST, LocalVariableInstruction, MONITORENTER, MONITOREXIT, NEWARRAY, NOP, RET, ReturnInstruction, SIPUSH, StackInstruction

public abstract class Instruction extends Object implements Cloneable
Abstract super class for all Java byte codes.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected short
    Deprecated.
    (since 6.0) will be made private; do not access directly, use getter/setter
    protected short
    Deprecated.
    (since 6.0) will be made private; do not access directly, use getter/setter
  • Constructor Summary

    Constructors
    Constructor
    Description
    Instruction(short opcode, short length)
    Constructs an Instruction.
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    Call corresponding visitor method(s).
    int
    This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.
    Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are).
    void
    Dumps instruction as byte code to stream out.
    boolean
    equals(Object that)
    Tests for equality, delegated to comparator
    Deprecated.
    (6.0) use the built in comparator, or wrap this class in another object that implements these methods
    int
    Gets the length (in bytes) of instruction.
    Gets the name of instruction, that is, opcode name.
    short
    Gets this instruction's opcode.
    int
    Gets the hashCode of this object.
    protected void
    initFromFile(ByteSequence bytes, boolean wide)
    Reads needed data (for example index) from file.
    static boolean
    isValidByte(int value)
    Tests if the value can fit in a byte (signed)
    static boolean
    isValidShort(int value)
    Tests if the value can fit in a short (signed)
    int
    This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.
    Reads an instruction from (byte code) input stream and return the appropriate object.
    static void
    Deprecated.
    (6.0) use the built in comparator, or wrap this class in another object that implements these methods
     
    toString(boolean verbose)
    Long output format: <name of opcode> "["<opcode number>"]" "("<length of instruction>")"
    Gets the mnemonic for instruction with symbolic references resolved.

    Methods inherited from class Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • length

      @Deprecated protected short length
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
    • opcode

      @Deprecated protected short opcode
      Deprecated.
      (since 6.0) will be made private; do not access directly, use getter/setter
  • Constructor Details

    • Instruction

      public Instruction(short opcode, short length)
      Constructs an Instruction.
      Parameters:
      opcode - the opcode.
      length - the instruction length.
  • Method Details

    • getComparator

      Deprecated.
      (6.0) use the built in comparator, or wrap this class in another object that implements these methods
      Gets Comparator object used in the equals() method to determine equality of instructions.
      Returns:
      currently used comparator for equals().
    • isValidByte

      public static boolean isValidByte(int value)
      Tests if the value can fit in a byte (signed)
      Parameters:
      value - the value to check.
      Returns:
      true if the value is in range.
      Since:
      6.0
    • isValidShort

      public static boolean isValidShort(int value)
      Tests if the value can fit in a short (signed)
      Parameters:
      value - the value to check.
      Returns:
      true if the value is in range.
      Since:
      6.0
    • readInstruction

      public static Instruction readInstruction(ByteSequence bytes) throws IOException
      Reads an instruction from (byte code) input stream and return the appropriate object.

      If the Instruction is defined in InstructionConst, then the singleton instance is returned.

      Parameters:
      bytes - input stream bytes.
      Returns:
      instruction object being read.
      Throws:
      IOException - Thrown when an I/O exception of some sort has occurred.
      See Also:
    • setComparator

      Deprecated.
      (6.0) use the built in comparator, or wrap this class in another object that implements these methods
      Sets comparator to be used for equals().
      Parameters:
      c - the comparator.
    • accept

      public abstract void accept(Visitor v)
      Call corresponding visitor method(s). The order is: Call visitor methods of implemented interfaces first, then call methods according to the class hierarchy in descending order, that is, the most specific visitXXX() call comes last.
      Parameters:
      v - Visitor object.
    • consumeStack

      public int consumeStack(ConstantPoolGen cpg)
      This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.
      Parameters:
      cpg - the constant pool generator.
      Returns:
      Number of words consumed from stack by this instruction, or Constants.UNPREDICTABLE, if this cannot be computed statically
    • copy

      public 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.
      See Also:
    • dump

      public void dump(DataOutputStream out) throws IOException
      Dumps instruction as byte code to stream out.
      Parameters:
      out - Output stream.
      Throws:
      IOException - Thrown when an I/O exception of some sort has occurred.
    • equals

      public boolean equals(Object that)
      Tests for equality, delegated to comparator
      Overrides:
      equals in class Object
      Returns:
      true if that is an Instruction and has the same opcode.
    • getLength

      public int getLength()
      Gets the length (in bytes) of instruction.
      Returns:
      length (in bytes) of instruction.
    • getName

      public String getName()
      Gets the name of instruction, that is, opcode name.
      Returns:
      name of instruction, that is, opcode name.
    • getOpcode

      public short getOpcode()
      Gets this instruction's opcode.
      Returns:
      this instruction's opcode.
    • hashCode

      public int hashCode()
      Gets the hashCode of this object.
      Overrides:
      hashCode in class Object
      Returns:
      the hashCode.
      Since:
      6.0
    • initFromFile

      protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException
      Reads needed data (for example index) from file.
      Parameters:
      bytes - byte sequence to read from.
      wide - "wide" instruction flag.
      Throws:
      IOException - may be thrown if the implementation needs to read data from the file
    • produceStack

      public int produceStack(ConstantPoolGen cpg)
      This method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.
      Parameters:
      cpg - the constant pool generator.
      Returns:
      Number of words produced onto stack by this instruction, or Constants.UNPREDICTABLE, if this cannot be computed statically
    • toString

      public String toString()
      Overrides:
      toString in class Object
      Returns:
      mnemonic for instruction in verbose format.
    • toString

      public String toString(boolean verbose)
      Long output format: <name of opcode> "["<opcode number>"]" "("<length of instruction>")"
      Parameters:
      verbose - long/short format switch.
      Returns:
      mnemonic for instruction.
    • toString

      Gets the mnemonic for instruction with symbolic references resolved.
      Parameters:
      cp - the constant pool.
      Returns:
      mnemonic for instruction with symbolic references resolved.