Class ExplodedInterproceduralCFG
java.lang.Object
com.ibm.wala.ipa.cfg.AbstractInterproceduralCFG<IExplodedBasicBlock>
com.ibm.wala.ipa.cfg.ExplodedInterproceduralCFG
- All Implemented Interfaces:
EdgeManager<BasicBlockInContext<IExplodedBasicBlock>>, Graph<BasicBlockInContext<IExplodedBasicBlock>>, NodeManager<BasicBlockInContext<IExplodedBasicBlock>>, NumberedEdgeManager<BasicBlockInContext<IExplodedBasicBlock>>, NumberedGraph<BasicBlockInContext<IExplodedBasicBlock>>, NumberedNodeManager<BasicBlockInContext<IExplodedBasicBlock>>, Iterable<BasicBlockInContext<IExplodedBasicBlock>>
Exploded interprocedural control-flow graph, constructed lazily.
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedExplodedInterproceduralCFG(CallGraph cg, Predicate<CGNode> filter) -
Method Summary
Methods inherited from class AbstractInterproceduralCFG
addEdge, addEdgesToNonEntryBlock, addNode, callGraphUpdated, containsNode, getCallGraph, getCallSiteForCallBlock, getCallSites, getCallTargets, getCFG, getCGNode, getEntry, getExit, getLastInstructionForBlock, getMaxNumber, getNode, getNumber, getNumberOfNodes, getPredNodeCount, getPredNodeNumbers, getPredNodes, getReturnSites, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasCall, hasCall, hasEdge, isReturn, iterateNodes, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, stream, toStringModifier and TypeMethodDescriptionvoidprotected voidaddEdgesToNonEntryBlock(CGNode n, ControlFlowGraph<?, IExplodedBasicBlock> cfg, SSAInstruction[] instrs, IExplodedBasicBlock bb) Add edges to the IPCFG for the incoming edges incident on a basic block bb.voidadd a node to this graphvoidShould be invoked when the underlying call graph has changed.booleanprotected CallSiteReferencegetCallSiteForCallBlock(IBasicBlock<SSAInstruction> B, ControlFlowGraph<SSAInstruction, IExplodedBasicBlock> cfg) get theCallSiteReferencecorresponding to the last instruction in B (assumed to be a call)getCallSites(BasicBlockInContext<IExplodedBasicBlock> returnBlock, CGNode callee) get the basic blocks which are call sites that may call callee and return to returnBlock if callee is null, answer return sites for which no callee was found.protected SSAInstructiongetLastInstructionForBlock(IExplodedBasicBlock pb, SSAInstruction[] instrs) intgetNode(int number) intintintReturn the number ofimmediate predecessornodes of nReturn anIteratorover the immediate predecessor nodes of ngetReturnSites(BasicBlockInContext<IExplodedBasicBlock> callBlock) intReturn the number ofimmediate successornodes of this Node in the GraphReturn an Iterator over the immediate successor nodes of nbooleanprotected booleanhasCall(BasicBlockInContext<IExplodedBasicBlock> B, ControlFlowGraph<SSAInstruction, IExplodedBasicBlock> cfg) booleanbooleaniterator()voidvoidremoveEdge(BasicBlockInContext<IExplodedBasicBlock> src, BasicBlockInContext<IExplodedBasicBlock> dst) voidvoidremove a node from this graphvoidremove a node and all its incident edgesvoidstream()toString()Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Iterable
forEach, spliterator
-
Constructor Details
-
ExplodedInterproceduralCFG
-
ExplodedInterproceduralCFG
-
-
Method Details
-
make
-
getCFG
public ControlFlowGraph<SSAInstruction, IExplodedBasicBlock> getCFG(CGNode n) throws IllegalArgumentException - Specified by:
getCFGin classAbstractInterproceduralCFG<IExplodedBasicBlock>- Returns:
- the cfg for n, or null if none found
- Throws:
IllegalArgumentException- if n == null
-