public class NotNullDataFlow extends VarContextDataFlow<NotNullAbsVal> implements JL5DataFlowDispatch<VarContext<NotNullAbsVal>>
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
DONT_TRACK_BOTTOM, output, WARN_ON_MISSING_EDGES, workQueue
Constructor and Description |
---|
NotNullDataFlow(NotNullAnalysisUtil autil,
WorkQueue<VarContext<NotNullAbsVal>> wq,
polyglot.frontend.Job job,
polyglot.types.TypeSystem ts,
polyglot.ast.NodeFactory nf) |
Modifier and Type | Method and Description |
---|---|
protected void |
check(polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> p)
"Check" the nodes of the graph for the not null analysis.
|
protected void |
check(polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.ast.Term n,
boolean entry,
VarContext<NotNullAbsVal> inItem,
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> outItems) |
protected java.lang.Object |
clone() |
protected VarContext<NotNullAbsVal> |
constructMissingContextForEdgeKey(polyglot.visit.FlowGraph.EdgeKey ek,
FinalVarContext<NotNullAbsVal> f,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
If an edge is missing this method is called to approximate the variable
context
|
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowArrayAccess(polyglot.ast.ArrayAccess n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowAssign(polyglot.ast.Assign n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowBinary(polyglot.ast.Binary n,
VarContext<NotNullAbsVal> dfIn,
VarContext<NotNullAbsVal> trueItem,
VarContext<NotNullAbsVal> falseItem,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowCall(polyglot.ast.Call n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowCast(polyglot.ast.Cast n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowCatch(polyglot.ast.Catch n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowCodeDecl(polyglot.ast.CodeDecl n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowConditional(polyglot.ast.Conditional n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowConstructorCall(polyglot.ast.ConstructorCall n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowEnumConstant(polyglot.ext.jl5.ast.EnumConstant n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowEnumConstantDecl(polyglot.ext.jl5.ast.EnumConstantDecl n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
The following methods provide support for JL5 language features.
|
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowExpr(polyglot.ast.Expr n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowExtendedFor(polyglot.ext.jl5.ast.ExtendedFor n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowField(polyglot.ast.Field n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowFieldDecl(polyglot.ast.FieldDecl n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowFinally(polyglot.ast.Block n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowFormal(polyglot.ast.Formal n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowImpl(VarContext<NotNullAbsVal> trueItem,
VarContext<NotNullAbsVal> falseItem,
VarContext<NotNullAbsVal> otherItem,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer) |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowInstanceof(polyglot.ast.Instanceof n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowLit(polyglot.ast.Lit n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowLocalDecl(polyglot.ast.LocalDecl n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowNew(polyglot.ast.New n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowNewArray(polyglot.ast.NewArray n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowParamTypeNode(polyglot.ext.jl5.ast.ParamTypeNode n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowReturn(polyglot.ast.Return n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowStmt(polyglot.ast.Stmt n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowThrow(polyglot.ast.Throw n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowTry(polyglot.ast.Try n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowTypeNode(polyglot.ast.TypeNode n,
VarContext<NotNullAbsVal> dfIn,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
flowUnary(polyglot.ast.Unary n,
VarContext<NotNullAbsVal> dfIn,
VarContext<NotNullAbsVal> trueItem,
VarContext<NotNullAbsVal> falseItem,
polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
Compute the dataflow for
n |
protected static java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> |
itemToMapWithExceptionResults(VarContext<NotNullAbsVal> i,
java.util.Set<polyglot.visit.FlowGraph.EdgeKey> edgeKeys,
polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer) |
argumentsOnResultStack, autil, checkInvariants, confluence, createInitialItem, dataflow, edgeKeyConvert, finalVarContextToDataFlowMap, flow, flow, flowArrayAccessAssign, flowArrayInit, flowAssert, flowBlock, flowBranch, flowConstructorDecl, flowDo, flowEmpty, flowEval, flowFieldAssign, flowIf, flowInitializer, flowLabeled, flowLocal, flowLocalAssign, flowMethodDecl, flowSpecial, 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
copy, enter, finish, finish, leave, override, toString, visitEdge, visitEdgeNoOverride
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
flowArrayAccessAssign, flowArrayInit, flowAssert, flowBlock, flowBranch, flowConstructorDecl, flowDo, flowEmpty, flowEval, flowFieldAssign, flowIf, flowInitializer, flowLabeled, flowLocal, flowLocalAssign, flowMethodDecl, flowSpecial, flowSuppress, flowSynchronized, flowWhile, ignoreNode
public NotNullDataFlow(NotNullAnalysisUtil autil, WorkQueue<VarContext<NotNullAbsVal>> wq, polyglot.frontend.Job job, polyglot.types.TypeSystem ts, polyglot.ast.NodeFactory nf)
protected java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> flowImpl(VarContext<NotNullAbsVal> trueItem, VarContext<NotNullAbsVal> falseItem, VarContext<NotNullAbsVal> otherItem, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
flowImpl
in class VarContextDataFlow<NotNullAbsVal>
public java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> flowTypeNode(polyglot.ast.TypeNode n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowTypeNode
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowTypeNode
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowStmt(polyglot.ast.Stmt n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
VarContextDataFlow
n
flowStmt
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowCatch(polyglot.ast.Catch n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowCatch
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowCatch
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowTry(polyglot.ast.Try n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowTry
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowTry
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowFinally(polyglot.ast.Block n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowFinally
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowFinally
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowExpr(polyglot.ast.Expr n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowExpr
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowExpr
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowCodeDecl(polyglot.ast.CodeDecl n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
VarContextDataFlow
n
flowCodeDecl
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowField(polyglot.ast.Field n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowField
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowField
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowReturn(polyglot.ast.Return n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowReturn
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowReturn
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowThrow(polyglot.ast.Throw n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowThrow
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowThrow
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowConditional(polyglot.ast.Conditional n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowConditional
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowConditional
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowLit(polyglot.ast.Lit n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowLit
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowLit
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowCall(polyglot.ast.Call n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowCall
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowCall
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowNew(polyglot.ast.New n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowNew
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowNew
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowNewArray(polyglot.ast.NewArray n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowNewArray
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowNewArray
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowArrayAccess(polyglot.ast.ArrayAccess n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowArrayAccess
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowArrayAccess
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowConstructorCall(polyglot.ast.ConstructorCall n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowConstructorCall
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowConstructorCall
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowUnary(polyglot.ast.Unary n, VarContext<NotNullAbsVal> dfIn, VarContext<NotNullAbsVal> trueItem, VarContext<NotNullAbsVal> falseItem, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowUnary
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowUnary
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowBinary(polyglot.ast.Binary n, VarContext<NotNullAbsVal> dfIn, VarContext<NotNullAbsVal> trueItem, VarContext<NotNullAbsVal> falseItem, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowBinary
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowBinary
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowAssign(polyglot.ast.Assign n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
VarContextDataFlow
n
flowAssign
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowInstanceof(polyglot.ast.Instanceof n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowInstanceof
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowInstanceof
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowCast(polyglot.ast.Cast n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowCast
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowCast
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowLocalDecl(polyglot.ast.LocalDecl n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowLocalDecl
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowLocalDecl
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowFieldDecl(polyglot.ast.FieldDecl n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowFieldDecl
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowFieldDecl
in class VarContextDataFlow<NotNullAbsVal>
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<NotNullAbsVal>> flowFormal(polyglot.ast.Formal n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
DataFlowDispatch
n
flowFormal
in interface DataFlowDispatch<VarContext<NotNullAbsVal>>
flowFormal
in class VarContextDataFlow<NotNullAbsVal>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurance of the dataflow node in the flowgraphprotected java.lang.Object clone() throws java.lang.CloneNotSupportedException
clone
in class java.lang.Object
java.lang.CloneNotSupportedException
protected void check(polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> p) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<VarContext<NotNullAbsVal>>
polyglot.types.SemanticException
protected void check(polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.ast.Term n, boolean entry, VarContext<NotNullAbsVal> inItem, java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> outItems) throws polyglot.types.SemanticException
check
in class polyglot.visit.DataFlow<VarContext<NotNullAbsVal>>
polyglot.types.SemanticException
protected static java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> itemToMapWithExceptionResults(VarContext<NotNullAbsVal> i, java.util.Set<polyglot.visit.FlowGraph.EdgeKey> edgeKeys, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
protected VarContext<NotNullAbsVal> constructMissingContextForEdgeKey(polyglot.visit.FlowGraph.EdgeKey ek, FinalVarContext<NotNullAbsVal> f, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
VarContextDataFlow
constructMissingContextForEdgeKey
in class VarContextDataFlow<NotNullAbsVal>
ek
- edge key of missing edgef
- the finalVarContext that we were using.public java.util.Map<polyglot.visit.FlowGraph.EdgeKey,VarContext<NotNullAbsVal>> flowEnumConstantDecl(polyglot.ext.jl5.ast.EnumConstantDecl n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
flowEnumConstantDecl
in interface JL5DataFlowDispatch<VarContext<NotNullAbsVal>>
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<NotNullAbsVal>> flowEnumConstant(polyglot.ext.jl5.ast.EnumConstant n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
JL5DataFlowDispatch
n
flowEnumConstant
in interface JL5DataFlowDispatch<VarContext<NotNullAbsVal>>
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<NotNullAbsVal>> flowExtendedFor(polyglot.ext.jl5.ast.ExtendedFor n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
JL5DataFlowDispatch
n
flowExtendedFor
in interface JL5DataFlowDispatch<VarContext<NotNullAbsVal>>
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<NotNullAbsVal>> flowParamTypeNode(polyglot.ext.jl5.ast.ParamTypeNode n, VarContext<NotNullAbsVal> dfIn, polyglot.visit.FlowGraph<VarContext<NotNullAbsVal>> graph, polyglot.visit.FlowGraph.Peer<VarContext<NotNullAbsVal>> peer)
JL5DataFlowDispatch
n
flowParamTypeNode
in interface JL5DataFlowDispatch<VarContext<NotNullAbsVal>>
n
- AST node to compute the dataflow fordfIn
- input dataflow itemgraph
- dataflow graphpeer
- occurrence of the dataflow node in the flowgraph