Class BasicBlock

All Implemented Interfaces:
Debug, GraphVertex<BasicBlock>, Comparable<BasicBlock>

public class BasicBlock extends AbstractVertex<Edge,BasicBlock> implements Debug
Simple basic block abstraction for BCEL.
See Also:
  • Field Details

    • nullCheckInstructionSet

      private static final BitSet nullCheckInstructionSet
      Set of instruction opcodes that have an implicit null check.
    • firstInstruction

      private org.apache.bcel.generic.InstructionHandle firstInstruction
    • lastInstruction

      private org.apache.bcel.generic.InstructionHandle lastInstruction
    • exceptionThrower

      private org.apache.bcel.generic.InstructionHandle exceptionThrower
    • exceptionGen

      private org.apache.bcel.generic.CodeExceptionGen exceptionGen
    • inJSRSubroutine

      private boolean inJSRSubroutine
    • numNonExceptionSuccessors

      private int numNonExceptionSuccessors
  • Constructor Details

    • BasicBlock

      public BasicBlock()
      Constructor.
  • Method Details

    • isInJSRSubroutine

      public boolean isInJSRSubroutine()
    • setInJSRSubroutine

      void setInJSRSubroutine(boolean inJSRSubroutine)
    • getId

      @Deprecated public int getId()
      Deprecated.
      call getLabel() instead
      Get the basic block's integer label.
      Returns:
      the BasicBlock's integer label
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • setExceptionThrower

      public void setExceptionThrower(org.apache.bcel.generic.InstructionHandle exceptionThrower)
      Set the instruction for which this block is the ETB.
      Parameters:
      exceptionThrower - the instruction
    • isExceptionThrower

      public boolean isExceptionThrower()
      Return whether or not this block is an exception thrower.
    • getExceptionThrower

      public org.apache.bcel.generic.InstructionHandle getExceptionThrower()
      Get the instruction for which this block is an exception thrower.
      Returns:
      the instruction, or null if this block is not an exception thrower
    • isNullCheck

      public boolean isNullCheck()
      Return whether or not this block is a null check.
    • getFirstInstruction

      public org.apache.bcel.generic.InstructionHandle getFirstInstruction()
      Get the first instruction in the basic block.
    • getLastInstruction

      public org.apache.bcel.generic.InstructionHandle getLastInstruction()
      Get the last instruction in the basic block.
    • getSuccessorOf

      @CheckForNull public org.apache.bcel.generic.InstructionHandle getSuccessorOf(org.apache.bcel.generic.InstructionHandle handle)
      Get the successor of given instruction within the basic block.
      Parameters:
      handle - the instruction
      Returns:
      the instruction's successor, or null if the instruction is the last in the basic block
    • getPredecessorOf

      public org.apache.bcel.generic.InstructionHandle getPredecessorOf(org.apache.bcel.generic.InstructionHandle handle)
      Get the predecessor of given instruction within the basic block.
      Parameters:
      handle - the instruction
      Returns:
      the instruction's predecessor, or null if the instruction is the first in the basic block
    • addInstruction

      public void addInstruction(org.apache.bcel.generic.InstructionHandle handle)
      Add an InstructionHandle to the basic block.
      Parameters:
      handle - the InstructionHandle
    • instructionIterator

      public BasicBlock.InstructionIterator instructionIterator()
      Get an Iterator over the instructions in the basic block.
    • instructionReverseIterator

      public Iterator<org.apache.bcel.generic.InstructionHandle> instructionReverseIterator()
      Get an Iterator over the instructions in the basic block in reverse order. This is useful for backwards dataflow analyses.
    • isEmpty

      public boolean isEmpty()
      Return true if there are no Instructions in this basic block.
    • pos

      public int pos()
    • isExceptionHandler

      public boolean isExceptionHandler()
      Is this block an exception handler?
    • getExceptionGen

      public org.apache.bcel.generic.CodeExceptionGen getExceptionGen()
      Get CodeExceptionGen object; returns null if this basic block is not the entry point of an exception handler.
      Returns:
      the CodeExceptionGen object, or null
    • setExceptionGen

      public void setExceptionGen(@Nullable TypeMerger m, org.apache.bcel.generic.CodeExceptionGen exceptionGen)
      Set the CodeExceptionGen object. Marks this basic block as the entry point of an exception handler.
      Parameters:
      exceptionGen - the CodeExceptionGen object for the block
    • containsInstruction

      public boolean containsInstruction(org.apache.bcel.generic.InstructionHandle handle)
      Return whether or not the basic block contains the given instruction.
      Parameters:
      handle - the instruction
      Returns:
      true if the block contains the instruction, false otherwise
    • containsInstructionWithOffset

      public boolean containsInstructionWithOffset(int offset)
      Return whether or not the basic block contains the instruction with the given bytecode offset.
      Parameters:
      offset - the bytecode offset
      Returns:
      true if the block contains an instruction with the given offset, false if it does not
    • getNumNonExceptionSuccessors

      int getNumNonExceptionSuccessors()
      Returns:
      Returns the numNonExceptionSuccessors.
    • setNumNonExceptionSuccessors

      void setNumNonExceptionSuccessors(int numNonExceptionSuccessors)
      Parameters:
      numNonExceptionSuccessors - The numNonExceptionSuccessors to set.