edu.umd.cs.findbugs.ba
Class BasicBlock

java.lang.Object
  extended by edu.umd.cs.findbugs.graph.AbstractVertex<Edge,BasicBlock>
      extended by edu.umd.cs.findbugs.ba.BasicBlock
All Implemented Interfaces:
Debug, GraphVertex<BasicBlock>, java.lang.Comparable<BasicBlock>

public class BasicBlock
extends AbstractVertex<Edge,BasicBlock>
implements Debug

Simple basic block abstraction for BCEL.

Author:
David Hovemeyer
See Also:
CFG

Nested Class Summary
 class BasicBlock.InstructionIterator
          A forward Iterator over the instructions of a basic block.
private static class BasicBlock.InstructionReverseIterator
          A reverse Iterator over the instructions in a basic block.
 
Field Summary
private  org.apache.bcel.generic.CodeExceptionGen exceptionGen
           
private  org.apache.bcel.generic.InstructionHandle exceptionThrower
           
private  org.apache.bcel.generic.InstructionHandle firstInstruction
           
private  org.apache.bcel.generic.InstructionHandle lastInstruction
           
private static java.util.BitSet nullCheckInstructionSet
          Set of instruction opcodes that have an implicit null check.
 
Fields inherited from interface edu.umd.cs.findbugs.ba.Debug
CHECK_ASSERTIONS, VERIFY_INTEGRITY
 
Constructor Summary
BasicBlock()
          Constructor.
 
Method Summary
 void addInstruction(org.apache.bcel.generic.InstructionHandle handle)
          Add an InstructionHandle to the basic block.
 boolean containsInstruction(org.apache.bcel.generic.InstructionHandle handle)
          Return whether or not the basic block contains the given instruction.
 boolean containsInstructionWithOffset(int offset)
          Return whether or not the basic block contains the instruction with the given bytecode offset.
 org.apache.bcel.generic.CodeExceptionGen getExceptionGen()
          Get CodeExceptionGen object; returns null if this basic block is not the entry point of an exception handler.
 org.apache.bcel.generic.InstructionHandle getExceptionThrower()
          Get the instruction for which this block is an exception thrower.
 org.apache.bcel.generic.InstructionHandle getFirstInstruction()
          Get the first instruction in the basic block.
 int getId()
           
 org.apache.bcel.generic.InstructionHandle getLastInstruction()
          Get the last instruction in the basic block.
 org.apache.bcel.generic.InstructionHandle getPredecessorOf(org.apache.bcel.generic.InstructionHandle handle)
          Get the predecessor of given instruction within the basic block.
 org.apache.bcel.generic.InstructionHandle getSuccessorOf(org.apache.bcel.generic.InstructionHandle handle)
          Get the successor of given instruction within the basic block.
 BasicBlock.InstructionIterator instructionIterator()
          Get an Iterator over the instructions in the basic block.
 java.util.Iterator<org.apache.bcel.generic.InstructionHandle> instructionReverseIterator()
          Get an Iterator over the instructions in the basic block in reverse order.
 boolean isEmpty()
          Return true if there are no Instructions in this basic block.
 boolean isExceptionHandler()
          Is this block an exception handler?
 boolean isExceptionThrower()
          Return whether or not this block is an exception thrower.
 boolean isNullCheck()
          Return whether or not this block is a null check.
 void setExceptionGen(org.apache.bcel.generic.CodeExceptionGen exceptionGen)
          Set the CodeExceptionGen object.
 void setExceptionThrower(org.apache.bcel.generic.InstructionHandle exceptionThrower)
          Set the instruction for which this block is the ETB.
 
Methods inherited from class edu.umd.cs.findbugs.graph.AbstractVertex
compareTo, getLabel, setLabel
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

nullCheckInstructionSet

private static final java.util.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
Constructor Detail

BasicBlock

public BasicBlock()
Constructor.

Method Detail

getId

public int getId()

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

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 java.util.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.


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(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