Class Instruction

java.lang.Object
org.apache.bcel.generic.Instruction
All Implemented Interfaces:
Serializable, 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, Serializable
Abstract super class for all Java byte codes.
See Also:
  • Field Details

    • length

      protected short length
    • opcode

      protected short opcode
  • Constructor Details

    • Instruction

      public Instruction(short opcode, short length)
  • Method Details

    • dump

      public void dump(DataOutputStream out) throws IOException
      Dump instruction as byte code to stream out.
      Parameters:
      out - Output stream
      Throws:
      IOException
    • getName

      public String getName()
      Returns:
      name of instruction, i.e., opcode name
    • 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

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

      public String toString(ConstantPool cp)
      Returns:
      mnemonic for instruction with sumbolic references resolved
    • 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:
    • initFromFile

      protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException
      Read needed data (e.g. 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
    • readInstruction

      public static final Instruction readInstruction(ByteSequence bytes) throws IOException
      Read an instruction from (byte code) input stream and return the appropiate object.
      Parameters:
      bytes - input stream bytes
      Returns:
      instruction object being read
      Throws:
      IOException
    • 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.
      Returns:
      Number of words consumed from stack by this instruction, or Constants.UNPREDICTABLE, if this can not be computed statically
    • 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.
      Returns:
      Number of words produced onto stack by this instruction, or Constants.UNPREDICTABLE, if this can not be computed statically
    • getOpcode

      public short getOpcode()
      Returns:
      this instructions opcode
    • getLength

      public int getLength()
      Returns:
      length (in bytes) of instruction
    • 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, i.e., the most specific visitXXX() call comes last.
      Parameters:
      v - Visitor object
    • getComparator

      @Deprecated public static InstructionComparator getComparator()
      Deprecated.
      use the built in comparator, or wrap this class in another object that implements these methods
      Get Comparator object used in the equals() method to determine equality of instructions.
      Returns:
      currently used comparator for equals()
    • setComparator

      @Deprecated public static void setComparator(InstructionComparator c)
      Deprecated.
      use the built in comparator, or wrap this class in another object that implements these methods
      Set comparator to be used for equals().
    • equals

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

      public int hashCode()
      calculate the hashCode of this object
      Overrides:
      hashCode in class Object
      Returns:
      the hashCode