Package boomerang.solver
Class BackwardBoomerangSolver<W extends wpds.impl.Weight>
- java.lang.Object
-
- sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W>
-
- boomerang.solver.AbstractBoomerangSolver<W>
-
- boomerang.solver.BackwardBoomerangSolver<W>
-
public abstract class BackwardBoomerangSolver<W extends wpds.impl.Weight> extends AbstractBoomerangSolver<W>
-
-
Field Summary
-
Fields inherited from class boomerang.solver.AbstractBoomerangSolver
cfg, dataFlowScope, generatedFieldState, icfg, INTERPROCEDURAL, options, perStatementFieldTransitions, type
-
-
Constructor Summary
Constructors Constructor Description BackwardBoomerangSolver(ObservableICFG<Statement,Method> icfg, ObservableControlFlowGraph cfg, 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, BackwardQuery query, 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, IBackwardFlowFunction backwardFlowFunction, com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements, com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements, Type propagationType)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidapplyCallSummary(ControlFlowGraph.Edge callSiteEdge, Val factAtSpInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge exitStmt, Val exitingFact)protected voidcallFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr, Statement callSite)protected Collection<? extends wpds.interfaces.State>computeCallFlow(ControlFlowGraph.Edge callSiteEdge, Val fact, Method callee, ControlFlowGraph.Edge calleeStartEdge)protected Collection<wpds.interfaces.State>computeNormalFlow(Method method, ControlFlowGraph.Edge currEdge, Val fact)protected Collection<? extends wpds.interfaces.State>computeReturnFlow(Method method, Statement callerReturnStatement, Val value)voidcomputeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node)sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>generateFieldState(sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> d, Field loc)protected voidnormalFlow(Method method, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode)voidprocessPush(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 voidpropagateUnbalancedToCallSite(Statement callSite, wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee)StringtoString()-
Methods inherited from class boomerang.solver.AbstractBoomerangSolver
addCallRule, addFieldRule, addPotentialUnbalancedFlow, allowUnbalanced, asEdgeValWeightTable, asStatementValWeightTable, createQueryNodeField, debugFieldAutomaton, emptyField, epsilonField, epsilonStmt, exclusionFieldWildCard, fieldWildCard, forceUnbalanced, getCallAutomaton, getCallPDS, getFieldAutomaton, getFieldPDS, getNumberOfRules, getResults, getResultsAt, isMatchingCallSiteCalleePair, preventCallTransitionAdd, preventFieldTransitionAdd, reachesNodeWithEmptyField, registerFieldTransitionListener, registerStatementCallTransitionListener, registerStatementFieldTransitionListener, returnFlow, synchedEmptyStackReachable, synchedReachable, unregisterAllListeners
-
Methods inherited from class sync.pds.solver.SyncPDSSolver
addApplySummaryListener, addGeneratedFieldState, addNormalCallFlow, addNormalFieldFlow, asFieldFact, debugOutput, generateCallState, getCallWeights, getFieldWeights, getReachedStates, processNode, processNormal, processPop, propagate, registerListener, registerListener, solve, solve, wrap
-
-
-
-
Constructor Detail
-
BackwardBoomerangSolver
public BackwardBoomerangSolver(ObservableICFG<Statement,Method> icfg, ObservableControlFlowGraph cfg, 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, BackwardQuery query, 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, IBackwardFlowFunction backwardFlowFunction, com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements, com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements, Type propagationType)
-
-
Method Detail
-
generateFieldState
public sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> generateFieldState(sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> d, Field loc)
- Overrides:
generateFieldStatein classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
computeReturnFlow
protected Collection<? extends wpds.interfaces.State> computeReturnFlow(Method method, Statement callerReturnStatement, Val value)
- Specified by:
computeReturnFlowin classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
callFlow
protected void callFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr, Statement callSite)
-
computeSuccessor
public void computeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node)
- Specified by:
computeSuccessorin classsync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>
-
normalFlow
protected void normalFlow(Method method, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode)
-
computeCallFlow
protected Collection<? extends wpds.interfaces.State> computeCallFlow(ControlFlowGraph.Edge callSiteEdge, Val fact, Method callee, ControlFlowGraph.Edge calleeStartEdge)
-
processPush
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)
- Overrides:
processPushin classsync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>
-
computeNormalFlow
protected Collection<wpds.interfaces.State> computeNormalFlow(Method method, ControlFlowGraph.Edge currEdge, Val fact)
- Specified by:
computeNormalFlowin classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
applyCallSummary
public void applyCallSummary(ControlFlowGraph.Edge callSiteEdge, Val factAtSpInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge exitStmt, Val exitingFact)
- Specified by:
applyCallSummaryin classsync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>
-
propagateUnbalancedToCallSite
protected void propagateUnbalancedToCallSite(Statement callSite, wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee)
- Specified by:
propagateUnbalancedToCallSitein classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
-