Package edu.umd.cs.findbugs.ba
Class CFG
- All Implemented Interfaces:
Debug
,Graph<Edge,
BasicBlock>
Simple control flow graph abstraction for BCEL.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
Flag set if CFG is busy (in the process of being refined.static final int
static final int
Flag set if CFG edges corresponding to failed assertions have been removed.static final int
Flag set if infeasible exception edges have been pruned from the CFG.static final int
Flag set if normal return edges from calls to methods which unconditionally throw an exception have been removed.static final int
Flag set if CFG has been "refined"; i.e., to the extent possible, all infeasible edges have been removed.Fields inherited from interface edu.umd.cs.findbugs.ba.Debug
VERIFY_INTEGRITY
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionallocate()
Allocate a new BasicBlock.protected Edge
allocateEdge
(BasicBlock source, BasicBlock target) Get an Iterator over the nodes (BasicBlocks) of the control flow graph.blocks()
void
void
clearFlag
(int flags) createEdge
(BasicBlock source, BasicBlock dest, int type) Add a unique edge to the graph.Get Collection of basic blocks whose IDs are specified by given BitSet.getBlocksContainingInstructionWithOffset
(int offset) Get a Collection of basic blocks which contain the bytecode instruction with given offset.getEntry()
Get the entry node.getExceptionThrowerLocation
(Edge exceptionEdge) Get the Location where exception(s) thrown on given exception edge are thrown.getExit()
Get the exit node.int
getFlags()
getIncomingEdgeWithType
(BasicBlock basicBlock, int edgeType) Get the first incoming edge in basic block with given type.Get the Location representing the entry to the CFG.getLocationsContainingInstructionWithOffset
(int offset) Get a Collection of Locations which specify the instruction at given bytecode offset.int
Get the number of edge labels allocated.org.apache.bcel.generic.MethodGen
int
Get number of basic blocks.int
Get number of non-exception control successors of given basic block.getOutgoingEdgeWithType
(BasicBlock basicBlock, int edgeType) Get the first outgoing edge in basic block with given type.getPredecessorWithEdgeType
(BasicBlock target, int edgeType) Get the first predecessor reachable from given edge type.getSuccessorWithEdgeType
(BasicBlock source, int edgeType) Get the first successor reachable from given edge type.boolean
isFlagSet
(int flag) Get an Iterator over the Locations in the control flow graph.Get an Iterator over the Locations in the control flow graph.lookupBlockByLabel
(int blockLabel) Look up a BasicBlock by its unique label.lookupEdgeById
(int id) Look up an Edge by its id.Returns a collection of locations, ordered according to the compareTo ordering over locations.Get an Iterator over Edges removed from this CFG.void
removeEdge
(Edge edge) Remove given edge from the graph.void
setFlag
(int flags) void
setFlags
(int flags) void
setMethodGen
(org.apache.bcel.generic.MethodGen methodGen) void
setMethodName
(String methodName) Methods inherited from class edu.umd.cs.findbugs.graph.AbstractGraph
addVertex, containsVertex, createEdge, edgeIterator, getNumEdgeLabels, getNumEdges, getNumIncomingEdges, getNumOutgoingEdges, getNumVertexLabels, getNumVertices, incomingEdgeIterator, lookupEdge, outgoingEdgeIterator, predecessorIterator, removeVertex, setNumEdgeLabels, setNumVertexLabels, successorIterator, vertexIterator, vertices
-
Field Details
-
PRUNED_INFEASIBLE_EXCEPTIONS
public static final int PRUNED_INFEASIBLE_EXCEPTIONSFlag set if infeasible exception edges have been pruned from the CFG.- See Also:
-
PRUNED_UNCONDITIONAL_THROWERS
public static final int PRUNED_UNCONDITIONAL_THROWERSFlag set if normal return edges from calls to methods which unconditionally throw an exception have been removed.- See Also:
-
REFINED
public static final int REFINEDFlag set if CFG has been "refined"; i.e., to the extent possible, all infeasible edges have been removed.- See Also:
-
PRUNED_FAILED_ASSERTION_EDGES
public static final int PRUNED_FAILED_ASSERTION_EDGESFlag set if CFG edges corresponding to failed assertions have been removed.- See Also:
-
BUSY
public static final int BUSYFlag set if CFG is busy (in the process of being refined.- See Also:
-
FOUND_INEXACT_UNCONDITIONAL_THROWERS
public static final int FOUND_INEXACT_UNCONDITIONAL_THROWERS- See Also:
-
-
Constructor Details
-
CFG
public CFG()Constructor. Creates empty control flow graph (with just entry and exit nodes).
-
-
Method Details
-
setMethodName
- Parameters:
methodName
- The methodName to set.
-
setMethodGen
public void setMethodGen(org.apache.bcel.generic.MethodGen methodGen) -
getMethodGen
public org.apache.bcel.generic.MethodGen getMethodGen() -
getMethodName
- Returns:
- Returns the methodName.
-
getMethodSig
-
setFlags
public void setFlags(int flags) -
setFlag
public void setFlag(int flags) -
clearFlag
public void clearFlag(int flags) -
getFlags
public int getFlags() -
isFlagSet
public boolean isFlagSet(int flag) -
getEntry
Get the entry node. -
getExit
Get the exit node. -
createEdge
Add a unique edge to the graph. There must be no other edge already in the CFG with the same source and destination blocks.- Parameters:
source
- the source basic blockdest
- the destination basic blocktype
- the type of edge; see constants in EdgeTypes interface- Returns:
- the newly created Edge
- Throws:
IllegalStateException
- if there is already an edge in the CFG with the same source and destination block
-
lookupEdgeById
Look up an Edge by its id.- Parameters:
id
- the id of the edge to look up- Returns:
- the Edge, or null if no matching Edge was found
-
lookupBlockByLabel
Look up a BasicBlock by its unique label.- Parameters:
blockLabel
- the label of a BasicBlock- Returns:
- the BasicBlock with the given label, or null if there is no such BasicBlock
-
blockIterator
Get an Iterator over the nodes (BasicBlocks) of the control flow graph. -
blocks
-
locationIterator
Get an Iterator over the Locations in the control flow graph. -
locations
Get an Iterator over the Locations in the control flow graph. -
orderedLocations
Returns a collection of locations, ordered according to the compareTo ordering over locations. If you want to list all the locations in a CFG for debugging purposes, this is a good order to do so in.- Returns:
- collection of locations
-
getBlocks
Get Collection of basic blocks whose IDs are specified by given BitSet.- Parameters:
labelSet
- BitSet of block labels- Returns:
- a Collection containing the blocks whose IDs are given
-
getBlocksContainingInstructionWithOffset
Get a Collection of basic blocks which contain the bytecode instruction with given offset.- Parameters:
offset
- the bytecode offset of an instruction- Returns:
- Collection of BasicBlock objects which contain the instruction with that offset
-
getLocationsContainingInstructionWithOffset
Get a Collection of Locations which specify the instruction at given bytecode offset.- Parameters:
offset
- the bytecode offset- Returns:
- all Locations referring to the instruction at that offset
-
getPredecessorWithEdgeType
Get the first predecessor reachable from given edge type.- Parameters:
target
- the target blockedgeType
- the edge type leading from the predecessor- Returns:
- the predecessor, or null if there is no incoming edge with the specified edge type
-
getSuccessorWithEdgeType
Get the first successor reachable from given edge type.- Parameters:
source
- the source blockedgeType
- the edge type leading to the successor- Returns:
- the successor, or null if there is no outgoing edge with the specified edge type
-
getExceptionThrowerLocation
Get the Location where exception(s) thrown on given exception edge are thrown.- Parameters:
exceptionEdge
- the exception Edge- Returns:
- Location where exception(s) are thrown from
-
removedEdgeIterator
Get an Iterator over Edges removed from this CFG.- Returns:
- Iterator over Edges removed from this CFG
-
getIncomingEdgeWithType
Get the first incoming edge in basic block with given type.- Parameters:
basicBlock
- the basic blockedgeType
- the edge type- Returns:
- the Edge, or null if there is no edge with that edge type
-
getOutgoingEdgeWithType
Get the first outgoing edge in basic block with given type.- Parameters:
basicBlock
- the basic blockedgeType
- the edge type- Returns:
- the Edge, or null if there is no edge with that edge type
-
allocate
Allocate a new BasicBlock. The block won't be connected to any node in the graph. -
getNumBasicBlocks
public int getNumBasicBlocks()Get number of basic blocks. This is just here for compatibility with the old CFG method names. -
getMaxEdgeId
public int getMaxEdgeId()Get the number of edge labels allocated. This is just here for compatibility with the old CFG method names. -
checkIntegrity
public void checkIntegrity() -
allocateEdge
- Specified by:
allocateEdge
in classAbstractGraph<Edge,
BasicBlock>
-
removeEdge
Description copied from interface:Graph
Remove given edge from the graph.- Specified by:
removeEdge
in interfaceGraph<Edge,
BasicBlock> - Overrides:
removeEdge
in classAbstractGraph<Edge,
BasicBlock>
-
getNumNonExceptionSucessors
Get number of non-exception control successors of given basic block.- Parameters:
block
- a BasicBlock- Returns:
- number of non-exception control successors of the basic block
-
getLocationAtEntry
Get the Location representing the entry to the CFG. Note that this is a "fake" Location, and shouldn't be relied on to yield source line information.- Returns:
- Location at entry to CFG
-
getPreviousLocation
-