public abstract class ForwardBoomerangSolver<W extends wpds.impl.Weight> extends AbstractBoomerangSolver<W>
cfg, dataFlowScope, generatedFieldState, icfg, INTERPROCEDURAL, options, perStatementFieldTransitions, type| Constructor and Description |
|---|
ForwardBoomerangSolver(ObservableICFG<Statement,Method> callGraph,
ObservableControlFlowGraph cfg,
ForwardQuery query,
Map<Map.Entry<sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,Field>,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> genField,
BoomerangOptions options,
wpds.impl.NestedWeightedPAutomatons<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>,W> callSummaries,
wpds.impl.NestedWeightedPAutomatons<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,W> fieldSummaries,
DataFlowScope scope,
IForwardFlowFunction flowFunctions,
com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements,
com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements,
Type propagationType) |
| Modifier and Type | Method and Description |
|---|---|
void |
applyCallSummary(ControlFlowGraph.Edge returnSiteStatement,
Val factInCallee,
ControlFlowGraph.Edge spInCallee,
ControlFlowGraph.Edge lastCfgEdgeInCallee,
Val returnedFact) |
protected void |
callFlow(Method caller,
sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode,
ControlFlowGraph.Edge callSiteEdge,
InvokeExpr invokeExpr) |
Collection<? extends wpds.interfaces.State> |
computeCallFlow(Method caller,
Statement callSite,
ControlFlowGraph.Edge succOfCallSite,
sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode,
Method callee,
ControlFlowGraph.Edge calleeStartEdge) |
Collection<wpds.interfaces.State> |
computeNormalFlow(Method method,
ControlFlowGraph.Edge nextEdge,
Val fact) |
Collection<? extends wpds.interfaces.State> |
computeReturnFlow(Method method,
Statement curr,
Val value) |
void |
computeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node) |
Query |
getQuery() |
protected abstract void |
overwriteFieldAtStatement(ControlFlowGraph.Edge fieldWriteStatementEdge,
wpds.impl.Transition<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> killedTransition) |
void |
processPush(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr,
wpds.interfaces.Location location,
sync.pds.solver.nodes.PushNode<ControlFlowGraph.Edge,Val,?> succ,
sync.pds.solver.SyncPDSSolver.PDSSystem system) |
protected void |
propagateUnbalancedToCallSite(Statement callSite,
wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee) |
String |
toString() |
addCallRule, addFieldRule, addPotentialUnbalancedFlow, allowUnbalanced, asStatementValWeightTable, createQueryNodeField, debugFieldAutomaton, emptyField, epsilonField, epsilonStmt, exclusionFieldWildCard, fieldWildCard, forceUnbalanced, generateFieldState, getCallAutomaton, getCallPDS, getFieldAutomaton, getFieldPDS, getNumberOfRules, getResults, getResultsAt, isMatchingCallSiteCalleePair, preventCallTransitionAdd, preventFieldTransitionAdd, reachesNodeWithEmptyField, registerFieldTransitionListener, registerStatementCallTransitionListener, registerStatementFieldTransitionListener, returnFlow, synchedEmptyStackReachable, synchedReachable, unregisterAllListenersaddApplySummaryListener, addGeneratedFieldState, addNormalCallFlow, addNormalFieldFlow, asFieldFact, debugOutput, generateCallState, getCallWeights, getFieldWeights, getReachedStates, processNode, processNormal, processPop, propagate, registerListener, registerListener, solve, solve, wrappublic ForwardBoomerangSolver(ObservableICFG<Statement,Method> callGraph, ObservableControlFlowGraph cfg, ForwardQuery query, Map<Map.Entry<sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,Field>,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> genField, BoomerangOptions options, wpds.impl.NestedWeightedPAutomatons<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>,W> callSummaries, wpds.impl.NestedWeightedPAutomatons<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,W> fieldSummaries, DataFlowScope scope, IForwardFlowFunction flowFunctions, com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements, com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements, Type propagationType)
public void processPush(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr, wpds.interfaces.Location location, sync.pds.solver.nodes.PushNode<ControlFlowGraph.Edge,Val,?> succ, sync.pds.solver.SyncPDSSolver.PDSSystem system)
processPush in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>protected void propagateUnbalancedToCallSite(Statement callSite, wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee)
propagateUnbalancedToCallSite in class AbstractBoomerangSolver<W extends wpds.impl.Weight>public void applyCallSummary(ControlFlowGraph.Edge returnSiteStatement, Val factInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge lastCfgEdgeInCallee, Val returnedFact)
applyCallSummary in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>public Collection<? extends wpds.interfaces.State> computeCallFlow(Method caller, Statement callSite, ControlFlowGraph.Edge succOfCallSite, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode, Method callee, ControlFlowGraph.Edge calleeStartEdge)
public Query getQuery()
public void computeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node)
computeSuccessor in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>protected abstract void overwriteFieldAtStatement(ControlFlowGraph.Edge fieldWriteStatementEdge, wpds.impl.Transition<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> killedTransition)
public Collection<wpds.interfaces.State> computeNormalFlow(Method method, ControlFlowGraph.Edge nextEdge, Val fact)
computeNormalFlow in class AbstractBoomerangSolver<W extends wpds.impl.Weight>protected void callFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode, ControlFlowGraph.Edge callSiteEdge, InvokeExpr invokeExpr)
public Collection<? extends wpds.interfaces.State> computeReturnFlow(Method method, Statement curr, Val value)
computeReturnFlow in class AbstractBoomerangSolver<W extends wpds.impl.Weight>Copyright © 2024. All rights reserved.