java.lang.Object
org.apache.commons.compress.harmony.unpack200.bytecode.forms.ByteCodeForm
Direct Known Subclasses:
ByteForm, IincForm, LabelForm, LocalForm, NoArgumentForm, ReferenceForm, ShortForm, VariableInstructionForm

public abstract class ByteCodeForm extends Object
Abstract byte code form.
  • Field Details

  • Constructor Details

    • ByteCodeForm

      public ByteCodeForm(int opcode, String name)
      Constructs a new instance with the specified opcode and name. Assume no rewrite.
      Parameters:
      opcode - index corresponding to the opcode's value.
      name - printable name of the opcode.
    • ByteCodeForm

      public ByteCodeForm(int opcode, String name, int[] rewrite)
      Constructs a new instance with the specified opcode, name, operandType and rewrite.
      Parameters:
      opcode - index corresponding to the opcode's value.
      name - String printable name of the opcode.
      rewrite - Operand positions (which will later be rewritten in ByteCodes) are indicated by -1.
  • Method Details

    • get

      public static ByteCodeForm get(int opcode)
      Gets a ByteCodeForm.
      Parameters:
      opcode - opcode index.
      Returns:
      the matching ByteCodeForm at the given opcode.
    • calculateOperandPosition

      protected void calculateOperandPosition()
    • firstOperandIndex

      public int firstOperandIndex()
    • fixUpByteCodeTargets

      public void fixUpByteCodeTargets(ByteCode byteCode, CodeAttribute codeAttribute)
      The ByteCodeForm knows how to fix up a bytecode if it needs to be fixed up because it holds a Label bytecode.
      Parameters:
      byteCode - a ByteCode to be fixed up
      codeAttribute - a CodeAttribute used to determine how the ByteCode should be fixed up.
    • getName

      public String getName()
      Gets the name.
      Returns:
      the name.
    • getOpcode

      public int getOpcode()
      Gets the opcode.
      Returns:
      the opcode.
    • getRewrite

      public int[] getRewrite()
      Gets the rewrite array.
      Returns:
      the rewrite array.
    • getRewriteCopy

      public int[] getRewriteCopy()
      Gets a copy of the rewrite array.
      Returns:
      a copy of the rewrite array.
    • hasMultipleByteCodes

      public boolean hasMultipleByteCodes()
      This method will answer true if the receiver is a multi-bytecode instruction (such as aload0_putfield_super); otherwise, it will answer false.
      Returns:
      boolean true if multibytecode, false otherwise
    • hasNoOperand

      public boolean hasNoOperand()
      Tests whether this instance has an operand.
      Returns:
      whether this instance has an operand.
    • nestedMustStartClassPool

      public boolean nestedMustStartClassPool()
    • operandLength

      public int operandLength()
      Gets the operand length.
      Returns:
      the operand length.
    • setByteCodeOperands

      public abstract void setByteCodeOperands(ByteCode byteCode, OperandManager operandManager, int codeLength) throws Pack200Exception
      Sets the rewrite of the byteCode.
      Parameters:
      byteCode - ByteCode to be updated (!)
      operandManager - OperandTable from which to draw info
      codeLength - Length of bytes (excluding this bytecode) from the beginning of the method. Used in calculating padding for some variable-length bytecodes (such as lookupswitch, tableswitch).
      Throws:
      Pack200Exception - if a type is not supported or an index not in the range [0, Integer.MAX_VALUE].
    • toString

      public String toString()
      Overrides:
      toString in class Object