public class DefUseDataFlow extends VarContextDataFlow<DefUseAbsVal>
PreciseDataFlow.PreciseCFGBuilder<FlowItem extends polyglot.visit.DataFlow.Item>
polyglot.visit.DataFlow.BoolItem<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.ConditionNavigator<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.FlowGraphSource<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.Frame<FlowItem extends polyglot.visit.DataFlow.Item>, polyglot.visit.DataFlow.Item
Modifier and Type | Field and Description |
---|---|
protected java.util.Set<AbstractLocation> |
aUnitDefs |
protected java.util.Set<AbstractLocation> |
aUnitObs |
protected java.util.Set<EdgeIdentifier> |
aUnitUses |
protected DefUseAnalysisUtil |
autil |
protected java.lang.String |
data_dep_results_key |
protected boolean |
heap_assign_is_use
Treat heap assignments as uses of the left-hand side.
|
protected java.util.Map<DataFlowNodeIdentifier,java.lang.Integer> |
nodePostordering |
DONT_TRACK_BOTTOM, output, WARN_ON_MISSING_EDGES, workQueue
Constructor and Description |
---|
DefUseDataFlow(DefUseAnalysisUtil autil,
WorkQueue<VarContext<DefUseAbsVal>> workQueue,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf) |
Modifier and Type | Method and Description |
---|---|
static <T> void |
addResults(java.lang.String resultKey,
AccrueExt rec,
AnalysisContext ctx,
java.util.Set<T> results)
Adds a set of results to the current set
|
protected void |
check(polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> p) |
protected void |
check(polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.ast.Term n,
boolean entry,
VarContext<DefUseAbsVal> inItem,
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> outItems) |
protected DefUseAbsVal |
createHeapDefinition(java.util.Set<AbstractLocation> locs,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
protected DefUseAbsVal |
createLocalDefinition(java.lang.String defined,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
protected FinalVarContext<DefUseAbsVal> |
flowArithmeticException(VarContext<DefUseAbsVal> dfIn,
polyglot.ast.Binary cause,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowArrayAccess(polyglot.ast.ArrayAccess n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowArrayAccessAssign(polyglot.ast.ArrayAccessAssign n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowArrayInit(polyglot.ast.ArrayInit n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowBinary(polyglot.ast.Binary n,
VarContext<DefUseAbsVal> dfIn,
VarContext<DefUseAbsVal> trueItem,
VarContext<DefUseAbsVal> falseItem,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowCall(polyglot.ast.Call n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowCast(polyglot.ast.Cast n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowCatch(polyglot.ast.Catch n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
protected FinalVarContext<DefUseAbsVal> |
flowClassCastException(VarContext<DefUseAbsVal> dfIn,
polyglot.ast.Cast cause,
DefUseAbsVal causeDFI,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowCodeDecl(polyglot.ast.CodeDecl n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowConstructorCall(polyglot.ast.ConstructorCall n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowExpr(polyglot.ast.Expr n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowField(polyglot.ast.Field n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowFieldAssign(polyglot.ast.FieldAssign n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowFieldDecl(polyglot.ast.FieldDecl n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowFinally(polyglot.ast.Block n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowFormal(polyglot.ast.Formal n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowIf(polyglot.ast.If n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowImpl(VarContext<DefUseAbsVal> trueItem,
VarContext<DefUseAbsVal> falseItem,
VarContext<DefUseAbsVal> otherItem,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
protected FinalVarContext<DefUseAbsVal> |
flowImpossibleException(FinalVarContext<DefUseAbsVal> res,
polyglot.types.ClassType exType,
polyglot.ast.Node cause) |
protected FinalVarContext<DefUseAbsVal> |
flowImpossibleException(VarContext<DefUseAbsVal> dfIn,
polyglot.types.ClassType exType,
polyglot.ast.Node cause,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowInstanceof(polyglot.ast.Instanceof n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowLit(polyglot.ast.Lit n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowLocal(polyglot.ast.Local n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowLocalAssign(polyglot.ast.LocalAssign n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowLocalDecl(polyglot.ast.LocalDecl n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowNew(polyglot.ast.New n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowNewArray(polyglot.ast.NewArray n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
protected FinalVarContext<DefUseAbsVal> |
flowNullPointerException(VarContext<DefUseAbsVal> dfIn,
polyglot.ast.Node cause,
DefUseAbsVal causeDFI,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
protected FinalVarContext<DefUseAbsVal> |
flowOutOfBoundsException(VarContext<DefUseAbsVal> dfIn,
polyglot.ast.Expr cause,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowReturn(polyglot.ast.Return n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowSpecial(polyglot.ast.Special n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowStmt(polyglot.ast.Stmt n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowThrow(polyglot.ast.Throw n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowTry(polyglot.ast.Try n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowTypeNode(polyglot.ast.TypeNode n,
VarContext<DefUseAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
flowUnary(polyglot.ast.Unary n,
VarContext<DefUseAbsVal> dfIn,
VarContext<DefUseAbsVal> trueItem,
VarContext<DefUseAbsVal> falseItem,
polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
Compute the dataflow for
n |
protected FinalVarContext<DefUseAbsVal> |
flowUncheckedException(VarContext<DefUseAbsVal> dfIn,
polyglot.types.ClassType exType,
polyglot.ast.Node cause,
polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer) |
protected static java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> |
itemToMapWithExceptionResults(VarContext<DefUseAbsVal> dfIn,
java.util.Set<polyglot.visit.FlowGraph.EdgeKey> edgeKeys) |
protected int |
postorderNodeIDs(polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> p,
int count,
java.util.Set<NodeIdentifier> visited) |
protected DefUseAbsVal |
upperBound(java.util.Collection<DefUseAbsVal> l) |
argumentsOnResultStack, autil, checkInvariants, confluence, constructMissingContextForEdgeKey, createInitialItem, dataflow, edgeKeyConvert, finalVarContextToDataFlowMap, flow, flow, flowAssert, flowAssign, flowBlock, flowBranch, flowConditional, flowConstructorDecl, flowDo, flowEmpty, flowEval, flowInitializer, flowLabeled, flowMethodDecl, flowSuppress, flowSynchronized, flowWhile, ignoreNode, keyConvert, post, postFieldDecl, safeConfluence, setWarnOnEdgesMissingData
createCFGBuilder, currentContext, dataFlowNodeIdentifierForPeer, dataFlowNodeIdentifierForPeer, initGraph, peerForDataFlowNodeIdentifier
confluence, constructItemsFromCondition, createFrame, createInitialItem, currentFlowGraph, dataflow, dataflow, dataflow, dumpFlowGraph, enterCall, filterItems, filterItemsExceptionSubclass, filterItemsNonError, filterItemsNonException, findSCCs, flow, flow, flow, flowBooleanConditions, flowToBooleanFlow, hasTrueFalseBranches, initGraph, itemsToMap, itemToMap, lang, leave, leaveCall, safeConfluence, safeConfluence
begin, catchErrors, enter, enterCall, enterError, errorQueue, hasErrors, job, leaveCall, leaveCall, nodeFactory, typeSystem
bypass, bypass, bypassChildren, override, visitChildren
protected final DefUseAnalysisUtil autil
protected final java.util.Set<EdgeIdentifier> aUnitUses
protected final java.util.Set<AbstractLocation> aUnitObs
protected final java.util.Set<AbstractLocation> aUnitDefs
protected final boolean heap_assign_is_use
protected final java.lang.String data_dep_results_key
protected java.util.Map<DataFlowNodeIdentifier,java.lang.Integer> nodePostordering
public DefUseDataFlow(DefUseAnalysisUtil autil, WorkQueue<VarContext<DefUseAbsVal>> workQueue, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf)
public static <T> void addResults(java.lang.String resultKey, AccrueExt rec, AnalysisContext ctx, java.util.Set<T> results)
resultKey
- The key of the analysis result to record.rec
- The extension object to record these results on.ctx
- The AnalysisContext to associate these results with.results
- protected int postorderNodeIDs(polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> p, int count, java.util.Set<NodeIdentifier> visited)
protected void check(polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> p) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<VarContext<DefUseAbsVal>>
polyglot.types.SemanticException
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowImpl(VarContext<DefUseAbsVal> trueItem, VarContext<DefUseAbsVal> falseItem, VarContext<DefUseAbsVal> otherItem, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
flowImpl
in class VarContextDataFlow<DefUseAbsVal>
protected void check(polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.ast.Term n, boolean entry, VarContext<DefUseAbsVal> inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> outItems) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<VarContext<DefUseAbsVal>>
polyglot.types.SemanticException
public java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowCodeDecl(polyglot.ast.CodeDecl n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
VarContextDataFlow
n
flowCodeDecl
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowLocalDecl(polyglot.ast.LocalDecl n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowLocalDecl
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowLocalDecl
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowFormal(polyglot.ast.Formal n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowFormal
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowFormal
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowLocal(polyglot.ast.Local n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowLocal
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowLocal
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowLocalAssign(polyglot.ast.LocalAssign n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowLocalAssign
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowLocalAssign
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowField(polyglot.ast.Field n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowField
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowField
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowFieldDecl(polyglot.ast.FieldDecl n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowFieldDecl
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowFieldDecl
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowFieldAssign(polyglot.ast.FieldAssign n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowFieldAssign
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowFieldAssign
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowArrayAccess(polyglot.ast.ArrayAccess n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowArrayAccess
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowArrayAccess
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurrence of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowArrayAccessAssign(polyglot.ast.ArrayAccessAssign n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowArrayAccessAssign
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowArrayAccessAssign
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowArrayInit(polyglot.ast.ArrayInit n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowArrayInit
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowArrayInit
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowNewArray(polyglot.ast.NewArray n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowNewArray
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowNewArray
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowCall(polyglot.ast.Call n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowCall
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowCall
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowNew(polyglot.ast.New n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowNew
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowNew
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowConstructorCall(polyglot.ast.ConstructorCall n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowConstructorCall
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowConstructorCall
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowThrow(polyglot.ast.Throw n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowThrow
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowThrow
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowReturn(polyglot.ast.Return n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowReturn
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowReturn
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowExpr(polyglot.ast.Expr n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowExpr
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowExpr
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowCast(polyglot.ast.Cast n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowCast
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowCast
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowBinary(polyglot.ast.Binary n, VarContext<DefUseAbsVal> dfIn, VarContext<DefUseAbsVal> trueItem, VarContext<DefUseAbsVal> falseItem, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowBinary
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowBinary
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowSpecial(polyglot.ast.Special n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowSpecial
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowSpecial
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowLit(polyglot.ast.Lit n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowLit
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowLit
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowInstanceof(polyglot.ast.Instanceof n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowInstanceof
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowInstanceof
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowUnary(polyglot.ast.Unary n, VarContext<DefUseAbsVal> dfIn, VarContext<DefUseAbsVal> trueItem, VarContext<DefUseAbsVal> falseItem, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowUnary
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowUnary
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowStmt(polyglot.ast.Stmt n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
VarContextDataFlow
n
flowStmt
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowFinally(polyglot.ast.Block n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowFinally
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowFinally
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowTypeNode(polyglot.ast.TypeNode n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowTypeNode
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowTypeNode
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowTry(polyglot.ast.Try n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowTry
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowTry
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowCatch(polyglot.ast.Catch n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowCatch
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowCatch
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphpublic java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> flowIf(polyglot.ast.If n, VarContext<DefUseAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<DefUseAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
DataFlowDispatch
n
flowIf
in interface DataFlowDispatch<VarContext<DefUseAbsVal>>
flowIf
in class VarContextDataFlow<DefUseAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphprotected FinalVarContext<DefUseAbsVal> flowUncheckedException(VarContext<DefUseAbsVal> dfIn, polyglot.types.ClassType exType, polyglot.ast.Node cause, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected FinalVarContext<DefUseAbsVal> flowImpossibleException(VarContext<DefUseAbsVal> dfIn, polyglot.types.ClassType exType, polyglot.ast.Node cause, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected FinalVarContext<DefUseAbsVal> flowImpossibleException(FinalVarContext<DefUseAbsVal> res, polyglot.types.ClassType exType, polyglot.ast.Node cause)
protected FinalVarContext<DefUseAbsVal> flowNullPointerException(VarContext<DefUseAbsVal> dfIn, polyglot.ast.Node cause, DefUseAbsVal causeDFI, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected FinalVarContext<DefUseAbsVal> flowArithmeticException(VarContext<DefUseAbsVal> dfIn, polyglot.ast.Binary cause, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected FinalVarContext<DefUseAbsVal> flowOutOfBoundsException(VarContext<DefUseAbsVal> dfIn, polyglot.ast.Expr cause, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected FinalVarContext<DefUseAbsVal> flowClassCastException(VarContext<DefUseAbsVal> dfIn, polyglot.ast.Cast cause, DefUseAbsVal causeDFI, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected DefUseAbsVal upperBound(java.util.Collection<DefUseAbsVal> l)
protected DefUseAbsVal createLocalDefinition(java.lang.String defined, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected DefUseAbsVal createHeapDefinition(java.util.Set<AbstractLocation> locs, polyglot.visit.FlowGraph.Peer<VarContext<DefUseAbsVal>> peer)
protected static java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<DefUseAbsVal>> itemToMapWithExceptionResults(VarContext<DefUseAbsVal> dfIn, java.util.Set<polyglot.visit.FlowGraph.EdgeKey> edgeKeys)