Package boomerang.solver
Class ForwardBoomerangSolver<W extends wpds.impl.Weight>
- java.lang.Object
-
- sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W>
-
- boomerang.solver.AbstractBoomerangSolver<W>
-
- boomerang.solver.ForwardBoomerangSolver<W>
-
public abstract class ForwardBoomerangSolver<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 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)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidapplyCallSummary(ControlFlowGraph.Edge returnSiteStatement, Val factInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge lastCfgEdgeInCallee, Val returnedFact)voidcallFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode, ControlFlowGraph.Edge callSiteEdge, InvokeExpr invokeExpr)voidcheckForFieldOverwrite(ControlFlowGraph.Edge curr, Val value)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)voidcomputeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node)BoomerangOptionsgetOptions()QuerygetQuery()protected abstract voidoverwriteFieldAtStatement(ControlFlowGraph.Edge fieldWriteStatementEdge, wpds.impl.Transition<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> killedTransition)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, generateFieldState, 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
-
ForwardBoomerangSolver
public 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)
-
-
Method Detail
-
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>
-
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>
-
applyCallSummary
public void applyCallSummary(ControlFlowGraph.Edge returnSiteStatement, Val factInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge lastCfgEdgeInCallee, Val returnedFact)
- Specified by:
applyCallSummaryin classsync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>
-
computeCallFlow
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)
-
getQuery
public Query getQuery()
-
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>
-
getOptions
public BoomerangOptions getOptions()
-
checkForFieldOverwrite
public void checkForFieldOverwrite(ControlFlowGraph.Edge curr, Val value)
-
overwriteFieldAtStatement
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)
-
computeNormalFlow
public Collection<wpds.interfaces.State> computeNormalFlow(Method method, ControlFlowGraph.Edge nextEdge, Val fact)
- Specified by:
computeNormalFlowin classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
callFlow
public void callFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode, ControlFlowGraph.Edge callSiteEdge, InvokeExpr invokeExpr)
-
computeReturnFlow
public Collection<? extends wpds.interfaces.State> computeReturnFlow(Method method, Statement curr, Val value)
- Specified by:
computeReturnFlowin classAbstractBoomerangSolver<W extends wpds.impl.Weight>
-
-