Package com.ibm.wala.demandpa.flowgraph
Class AbstractDemandFlowGraph
- java.lang.Object
-
- com.ibm.wala.util.graph.AbstractGraph<T>
-
- com.ibm.wala.util.graph.AbstractNumberedGraph<T>
-
- com.ibm.wala.util.graph.labeled.AbstractNumberedLabeledGraph<T,U>
-
- com.ibm.wala.util.graph.labeled.SlowSparseNumberedLabeledGraph<Object,IFlowLabel>
-
- com.ibm.wala.demandpa.flowgraph.AbstractFlowGraph
-
- com.ibm.wala.demandpa.flowgraph.AbstractDemandFlowGraph
-
- All Implemented Interfaces:
IFlowGraph
,EdgeManager<Object>
,Graph<Object>
,LabeledEdgeManager<Object,IFlowLabel>
,LabeledGraph<Object,IFlowLabel>
,NodeManager<Object>
,NumberedEdgeManager<Object>
,NumberedGraph<Object>
,NumberedNodeManager<Object>
,Iterable<Object>
- Direct Known Subclasses:
DemandPointerFlowGraph
,DemandValueFlowGraph
public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph
A graph representing program flow, constructed method-by-method on demand
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
AbstractDemandFlowGraph.FlowStatementVisitor
-
Field Summary
-
Fields inherited from class com.ibm.wala.demandpa.flowgraph.AbstractFlowGraph
callDefs, callParams, cg, cha, heapModel, mam, params, returns
-
-
Constructor Summary
Constructors Constructor Description AbstractDemandFlowGraph(CallGraph cg, HeapModel heapModel, MemoryAccessMap mam, IClassHierarchy cha)
-
Method Summary
-
Methods inherited from class com.ibm.wala.demandpa.flowgraph.AbstractFlowGraph
addExceptionDefConstraints, addNodeConstantConstraints, addNodePassthruExceptionConstraints, addNodesForInvocations, convertPointerKeyToHeapModel, getArrayReads, getInstrReturningTo, getInstrsPassingParam, getReadsOfInstanceField, getReadsOfStaticField, getWritesToInstanceField, getWritesToStaticField, isParam, visitPreds, visitSuccs
-
Methods inherited from class com.ibm.wala.util.graph.labeled.SlowSparseNumberedLabeledGraph
copyInto, duplicate, getEdgeManager, getNodeManager
-
Methods inherited from class com.ibm.wala.util.graph.labeled.AbstractNumberedLabeledGraph
addEdge, getDefaultLabel, getEdgeLabels, getPredLabels, getPredNodeCount, getPredNodeNumbers, getPredNodes, getSuccLabels, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasEdge, removeEdge
-
Methods inherited from class com.ibm.wala.util.graph.AbstractNumberedGraph
getMaxNumber, getNode, getNumber, getPredNodeNumbers, getSuccNodeNumbers, iterateNodes
-
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
-
Methods inherited from interface com.ibm.wala.util.graph.EdgeManager
addEdge, getPredNodeCount, getPredNodes, getSuccNodeCount, getSuccNodes, hasEdge, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeOutgoingEdges
-
Methods inherited from interface com.ibm.wala.util.graph.Graph
removeNodeAndEdges
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface com.ibm.wala.util.graph.labeled.LabeledEdgeManager
addEdge, getDefaultLabel, getEdgeLabels, getPredLabels, getPredNodeCount, getPredNodes, getSuccLabels, getSuccNodeCount, getSuccNodes, hasEdge, removeEdge
-
Methods inherited from interface com.ibm.wala.util.graph.NodeManager
addNode, containsNode, getNumberOfNodes, iterator, removeNode
-
-
-
-
Constructor Detail
-
AbstractDemandFlowGraph
public AbstractDemandFlowGraph(CallGraph cg, HeapModel heapModel, MemoryAccessMap mam, IClassHierarchy cha)
-
-
Method Detail
-
addSubgraphForNode
public void addSubgraphForNode(CGNode node) throws IllegalArgumentException
Description copied from interface:IFlowGraph
add representation of flow for a node, if not already present- Throws:
IllegalArgumentException
- if node == null
-
hasSubgraphForNode
public boolean hasSubgraphForNode(CGNode node)
-
getParamSuccs
public Iterator<PointerKeyAndCallSite> getParamSuccs(LocalPointerKey pk)
-
getParamPreds
public Iterator<PointerKeyAndCallSite> getParamPreds(LocalPointerKey pk)
-
getReturnSuccs
public Iterator<PointerKeyAndCallSite> getReturnSuccs(LocalPointerKey pk)
-
getReturnPreds
public Iterator<PointerKeyAndCallSite> getReturnPreds(LocalPointerKey pk)
-
unconditionallyAddConstraintsFromNode
protected void unconditionallyAddConstraintsFromNode(CGNode node, IR ir)
-
addNodeInstructionConstraints
protected void addNodeInstructionConstraints(CGNode node, IR ir, DefUse du)
Add pointer flow constraints based on instructions in a given node
-
addBlockInstructionConstraints
protected void addBlockInstructionConstraints(CGNode node, ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg, ISSABasicBlock b, AbstractDemandFlowGraph.FlowStatementVisitor v)
Add constraints for a particular basic block.
-
makeVisitor
protected abstract AbstractDemandFlowGraph.FlowStatementVisitor makeVisitor(CGNode node)
-
getPotentialCallers
public Set<CallerSiteContext> getPotentialCallers(PointerKey formalPk)
- Parameters:
formalPk
- aPointerKey
representing either a formal parameter or return value- Returns:
- the
CallerSiteContext
s representing pointer callers offormalPk
's method
-
getPossibleTargets
public Set<CGNode> getPossibleTargets(CGNode node, CallSiteReference site, LocalPointerKey actualPk)
Description copied from interface:IFlowGraph
get the callees that should be considered at a particular call site- Parameters:
node
- the callersite
- the call siteactualPk
- aLocalPointerKey
corresponding to the actual parameter or return value of interest. This may be used to filter out certain callees.- Returns:
- the callees of interest
-
-