com.ibm.wala.cast.ir.cfg
Class DelegatingCFG<I,T extends IBasicBlock<I>>
java.lang.Object
com.ibm.wala.util.graph.AbstractGraph<T>
com.ibm.wala.util.graph.AbstractNumberedGraph<T>
com.ibm.wala.cast.ir.cfg.DelegatingCFG<I,T>
- All Implemented Interfaces:
- ControlFlowGraph<I,T>, EdgeManager<T>, Graph<T>, NodeManager<T>, NumberedEdgeManager<T>, NumberedGraph<T>, NumberedNodeManager<T>, java.lang.Iterable<T>
public class DelegatingCFG<I,T extends IBasicBlock<I>>
- extends AbstractNumberedGraph<T>
- implements ControlFlowGraph<I,T>
| Methods inherited from class com.ibm.wala.util.graph.AbstractGraph |
addEdge, addNode, containsNode, getNumberOfNodes, getPredNodeCount, getPredNodes, getSuccNodeCount, getSuccNodes, hasEdge, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, toString |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
parent
protected final ControlFlowGraph<I,T extends IBasicBlock<I>> parent
DelegatingCFG
public DelegatingCFG(ControlFlowGraph<I,T> parent)
getNodeManager
protected NumberedNodeManager<T> getNodeManager()
- Specified by:
getNodeManager in class AbstractNumberedGraph<T extends IBasicBlock<I>>
- Returns:
- the object which manages nodes in the graph
getEdgeManager
protected NumberedEdgeManager<T> getEdgeManager()
- Specified by:
getEdgeManager in class AbstractNumberedGraph<T extends IBasicBlock<I>>
- Returns:
- the object which manages edges in the graph
entry
public T entry()
- Description copied from interface:
ControlFlowGraph
- Return the entry basic block in the CFG
- Specified by:
entry in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
exit
public T exit()
- Specified by:
exit in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the synthetic exit block for the cfg
getCatchBlocks
public BitVector getCatchBlocks()
- Specified by:
getCatchBlocks in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the indices of the catch blocks, as a bit vector
getBlockForInstruction
public T getBlockForInstruction(int index)
- Specified by:
getBlockForInstruction in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Parameters:
index - an instruction index
- Returns:
- the basic block which contains this instruction.
getInstructions
public I[] getInstructions()
- Specified by:
getInstructions in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the instructions of this CFG, as an array.
getProgramCounter
public int getProgramCounter(int index)
- Description copied from interface:
ControlFlowGraph
- TODO: move this into IR?
- Specified by:
getProgramCounter in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Parameters:
index - an instruction index
- Returns:
- the program counter (bytecode index) corresponding to that instruction
getMethod
public IMethod getMethod()
- Specified by:
getMethod in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the Method this CFG represents
getExceptionalSuccessors
public java.util.List<T> getExceptionalSuccessors(T b)
- Description copied from interface:
ControlFlowGraph
- The order of blocks returned must indicate the exception-handling scope. So the first block is the first candidate catch block,
and so on. With this invariant one can compute the exceptional control flow for a given exception type.
- Specified by:
getExceptionalSuccessors in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the basic blocks which may be reached from b via exceptional control flow
getNormalSuccessors
public java.util.Collection<T> getNormalSuccessors(T b)
- Description copied from interface:
ControlFlowGraph
- The order of blocks returned should be arbitrary but deterministic.
- Specified by:
getNormalSuccessors in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the basic blocks which may be reached from b via normal control flow
getExceptionalPredecessors
public java.util.Collection<T> getExceptionalPredecessors(T b)
- Description copied from interface:
ControlFlowGraph
- The order of blocks returned should be arbitrary but deterministic.
- Specified by:
getExceptionalPredecessors in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the basic blocks from which b may be reached via exceptional control flow
getNormalPredecessors
public java.util.Collection<T> getNormalPredecessors(T b)
- Description copied from interface:
ControlFlowGraph
- The order of blocks returned should be arbitrary but deterministic.
- Specified by:
getNormalPredecessors in interface ControlFlowGraph<I,T extends IBasicBlock<I>>
- Returns:
- the basic blocks from which b may be reached via normal control flow