Class DismantleBytecode

All Implemented Interfaces:
org.apache.bcel.classfile.Visitor
Direct Known Subclasses:
BytecodeScanningDetector, CloneIdiom, NoteDirectlyRelevantTypeQualifiers

public abstract class DismantleBytecode extends AnnotationVisitor
  • Field Details

    • opcode

      private int opcode
    • opcodeIsWide

      private boolean opcodeIsWide
    • PC

      private int PC
    • nextPC

      private int nextPC
    • branchOffset

      private int branchOffset
    • branchTarget

      private int branchTarget
    • branchFallThrough

      private int branchFallThrough
    • switchOffsets

      private int[] switchOffsets
    • switchLabels

      private int[] switchLabels
    • prevOpcode

      private final int[] prevOpcode
    • currentPosInPrevOpcodeBuffer

      private int currentPosInPrevOpcodeBuffer
    • sizePrevOpcodeBuffer

      private int sizePrevOpcodeBuffer
    • defaultSwitchOffset

      private int defaultSwitchOffset
    • classConstantOperand

      @SlashedClassName private String classConstantOperand
    • referencedClass

      private ClassDescriptor referencedClass
    • referencedXClass

      private XClass referencedXClass
    • referencedMethod

      private MethodDescriptor referencedMethod
    • referencedXMethod

      private XMethod referencedXMethod
    • referencedField

      private FieldDescriptor referencedField
    • referencedXField

      private XField referencedXField
    • dottedClassConstantOperand

      private String dottedClassConstantOperand
    • nameConstantOperand

      private String nameConstantOperand
    • sigConstantOperand

      private String sigConstantOperand
    • stringConstantOperand

      private String stringConstantOperand
    • refConstantOperand

      private String refConstantOperand
    • refFieldIsStatic

      private boolean refFieldIsStatic
    • constantRefOperand

      private org.apache.bcel.classfile.Constant constantRefOperand
    • intConstant

      private int intConstant
    • longConstant

      private long longConstant
    • floatConstant

      private float floatConstant
    • doubleConstant

      private double doubleConstant
    • registerOperand

      private int registerOperand
    • isRegisterLoad

      private boolean isRegisterLoad
    • isRegisterStore

      private boolean isRegisterStore
    • INVALID_OFFSET

      private static final int INVALID_OFFSET
      See Also:
    • NOT_AVAILABLE

      private static final String NOT_AVAILABLE
      See Also:
    • M_INT

      public static final byte M_INT
      Meaning of bytecode operands
      See Also:
    • M_UINT

      public static final byte M_UINT
      See Also:
    • M_CP

      public static final byte M_CP
      See Also:
    • M_R

      public static final byte M_R
      See Also:
    • M_BR

      public static final byte M_BR
      See Also:
    • M_PAD

      public static final byte M_PAD
      See Also:
    • MEANING_OF_OPERANDS

      static final byte[][] MEANING_OF_OPERANDS
      Meaning of bytecode operands
    • codeBytes

      protected byte[] codeBytes
    • lineNumberTable

      protected org.apache.bcel.classfile.LineNumberTable lineNumberTable
    • formatter

      private static NumberFormat formatter
  • Constructor Details

    • DismantleBytecode

      public DismantleBytecode()
  • Method Details

    • replaceSlashesWithDots

      static String replaceSlashesWithDots(String c)
    • getClassDescriptorOperand

      public ClassDescriptor getClassDescriptorOperand()
    • getXClassOperand

      @CheckForNull public XClass getXClassOperand()
    • isMethodCall

      public boolean isMethodCall()
    • getMethodDescriptorOperand

      public MethodDescriptor getMethodDescriptorOperand()
    • getXMethodOperand

      @CheckForNull public XMethod getXMethodOperand()
    • getFieldDescriptorOperand

      public FieldDescriptor getFieldDescriptorOperand()
    • getXFieldOperand

      @CheckForNull public XField getXFieldOperand()
    • getDottedClassConstantOperand

      public String getDottedClassConstantOperand()
      If the current opcode has a class operand, get the associated class constant, dot-formatted
    • getRefConstantOperand

      @Deprecated public String getRefConstantOperand()
      Deprecated.
      If the current opcode has a reference constant operand, get its string representation
    • getNameConstantOperand

      public String getNameConstantOperand()
      If the current opcode has a reference constant operand, get its name
    • getSigConstantOperand

      public String getSigConstantOperand()
      If the current opcode has a reference constant operand, get its signature, slash-formatted
    • getClassConstantOperand

      @SlashedClassName public String getClassConstantOperand()
      If the current opcode has a class constant operand, get the classname, slash-formatted.
    • getStringConstantOperand

      public String getStringConstantOperand()
      If the current opcode has a string constant operand, get its name
    • getConstantRefOperand

      public org.apache.bcel.classfile.Constant getConstantRefOperand()
    • isRegisterLoad

      public boolean isRegisterLoad()
    • isRegisterStore

      public boolean isRegisterStore()
    • getRegisterOperand

      public int getRegisterOperand()
    • getIntConstant

      public int getIntConstant()
    • getLongConstant

      public long getLongConstant()
    • getBranchOffset

      public int getBranchOffset()
    • getBranchTarget

      public int getBranchTarget()
    • getBranchFallThrough

      public int getBranchFallThrough()
    • getDefaultSwitchOffset

      public int getDefaultSwitchOffset()
    • getRefFieldIsStatic

      public boolean getRefFieldIsStatic()
    • getPC

      public int getPC()
    • getPrevOpcode

      public int getPrevOpcode(int offset)
      return previous opcode;
      Parameters:
      offset - 0 for current opcode, 1 for one before that, etc.
    • isWideOpcode

      public boolean isWideOpcode()
    • isBranch

      public static boolean isBranch(int opcode)
      Return whether or not given opcode is a branch instruction.
      Parameters:
      opcode - the opcode
      Returns:
      true if instruction is a branch, false if not
    • isSwitch

      public static boolean isSwitch(int opcode)
      Return whether or not given opcode is a switch instruction.
      Parameters:
      opcode - the opcode
      Returns:
      true if instruction is a switch, false if not
    • getSwitchOffsets

      public int[] getSwitchOffsets()
    • getSwitchLabels

      public int[] getSwitchLabels()
    • resetState

      private void resetState()
    • sortByOffset

      private static void sortByOffset(int[] switchOffsets, int[] switchLabels)
    • getMaxPC

      public int getMaxPC()
    • getCodeByte

      public int getCodeByte(int offset)
    • getOpcode

      public int getOpcode()
    • atCatchBlock

      public boolean atCatchBlock()
    • visit

      public void visit(org.apache.bcel.classfile.Code obj)
      Overrides:
      visit in class BetterVisitor
    • sawDouble

      public void sawDouble(double seen)
    • sawFloat

      public void sawFloat(float seen)
    • sawRegister

      public void sawRegister(int r)
    • sawInt

      public void sawInt(int seen)
    • sawLong

      public void sawLong(long seen)
    • sawBranchTo

      public void sawBranchTo(int targetPC)
    • beforeOpcode

      public boolean beforeOpcode(int seen)
      return false if we should skip calling sawOpcode
    • afterOpcode

      public void afterOpcode(int seen)
    • sawOpcode

      public void sawOpcode(int seen)
    • sawString

      public void sawString(String seen)
    • sawField

      public void sawField()
    • sawMethod

      public void sawMethod()
    • sawIMethod

      public void sawIMethod()
    • sawClass

      public void sawClass()
    • printOpCode

      public void printOpCode(int seen)
    • getNextPC

      public int getNextPC()
      Returns:
      Returns the nextPC.
    • getNextOpcode

      public int getNextOpcode()
    • getNextCodeByte

      public int getNextCodeByte(int offset)
    • isReturn

      public boolean isReturn(int opcode)
    • isShift

      public boolean isShift(int opcode)
    • areOppositeBranches

      public static boolean areOppositeBranches(int opcode1, int opcode2)
    • isRegisterStore

      public boolean isRegisterStore(int opcode)
    • setReferencedXClass

      private void setReferencedXClass(XClass referencedXClass)
      Parameters:
      referencedXClass - The referencedXClass to set.
    • getReferencedXClass

      private XClass getReferencedXClass()
      Returns:
      Returns the referencedXClass.