public abstract class AbstractDemandFlowGraph extends AbstractFlowGraph
Modifier and Type | Class and Description |
---|---|
protected static interface |
AbstractDemandFlowGraph.FlowStatementVisitor |
callDefs, callParams, cg, cha, heapModel, mam, params, returns
Constructor and Description |
---|
AbstractDemandFlowGraph(CallGraph cg,
HeapModel heapModel,
MemoryAccessMap mam,
IClassHierarchy cha) |
addExceptionDefConstraints, addNodeConstantConstraints, addNodePassthruExceptionConstraints, addNodesForInvocations, convertPointerKeyToHeapModel, getArrayReads, getInstrReturningTo, getInstrsPassingParam, getReadsOfInstanceField, getReadsOfStaticField, getWritesToInstanceField, getWritesToStaticField, isParam, visitPreds, visitSuccs
copyInto, duplicate, getEdgeManager, getNodeManager
addEdge, getDefaultLabel, getEdgeLabels, getPredLabels, getPredNodeCount, getPredNodeNumbers, getPredNodes, getSuccLabels, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasEdge, removeEdge
getMaxNumber, getNode, getNumber, getPredNodeNumbers, getSuccNodeNumbers, iterateNodes
addEdge, addNode, containsNode, getNumberOfNodes, getPredNodeCount, getPredNodes, getSuccNodeCount, getSuccNodes, hasEdge, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
removeNodeAndEdges
addNode, containsNode, getNumberOfNodes, iterator, removeNode
forEach, spliterator
addEdge, getDefaultLabel, getEdgeLabels, getPredLabels, getPredNodeCount, getPredNodes, getSuccLabels, getSuccNodeCount, getSuccNodes, hasEdge, removeEdge
addEdge, getPredNodeCount, getPredNodes, getSuccNodeCount, getSuccNodes, hasEdge, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeOutgoingEdges
public AbstractDemandFlowGraph(CallGraph cg, HeapModel heapModel, MemoryAccessMap mam, IClassHierarchy cha)
public void addSubgraphForNode(CGNode node) throws IllegalArgumentException
IFlowGraph
IllegalArgumentException
- if node == nullpublic boolean hasSubgraphForNode(CGNode node)
public Iterator<PointerKeyAndCallSite> getParamSuccs(LocalPointerKey pk)
public Iterator<PointerKeyAndCallSite> getParamPreds(LocalPointerKey pk)
public Iterator<PointerKeyAndCallSite> getReturnSuccs(LocalPointerKey pk)
public Iterator<PointerKeyAndCallSite> getReturnPreds(LocalPointerKey pk)
protected void unconditionallyAddConstraintsFromNode(CGNode node, IR ir)
protected void addNodeInstructionConstraints(CGNode node, IR ir, DefUse du)
protected void addBlockInstructionConstraints(CGNode node, ControlFlowGraph<SSAInstruction,ISSABasicBlock> cfg, ISSABasicBlock b, AbstractDemandFlowGraph.FlowStatementVisitor v)
protected abstract AbstractDemandFlowGraph.FlowStatementVisitor makeVisitor(CGNode node)
public Set<CallerSiteContext> getPotentialCallers(PointerKey formalPk)
formalPk
- a PointerKey
representing either a formal parameter or return valueCallerSiteContext
s representing pointer callers of formalPk
's methodpublic Set<CGNode> getPossibleTargets(CGNode node, CallSiteReference site, LocalPointerKey actualPk)
IFlowGraph
node
- the callersite
- the call siteactualPk
- a LocalPointerKey
corresponding to the actual parameter or return value of interest. This may be used
to filter out certain callees.