D - The type of data-flow facts to be computed by the tabulation problem.public abstract class DefaultIFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>> extends java.lang.Object implements IFDSTabulationProblem<N,D,M,I>
IFDSTabulationProblems that automatically caches values
that ought to be cached. This class uses the Factory Method design pattern.
The InterproceduralCFG is passed into the constructor so that it can be conveniently
reused for solving multiple different IFDSTabulationProblems.
This class is specific to Soot.| Constructor and Description |
|---|
DefaultIFDSTabulationProblem(I icfg) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
autoAddZero()
If true, the solver will automatically add the zero value to each flow-function call's result set.
|
boolean |
computeValues()
If false, then the solver will only compute the exploded super graph but not propagate values.
|
protected abstract FlowFunctions<N,D,M> |
createFlowFunctionsFactory() |
protected abstract D |
createZeroValue() |
FlowFunctions<N,D,M> |
flowFunctions()
Returns a set of flow functions.
|
boolean |
followReturnsPastSeeds()
If true, the analysis will compute a partially unbalanced analysis problem in which
function returns are followed also further up the call stack than where the initial seeds
started.
|
I |
interproceduralCFG()
Returns the interprocedural control-flow graph which this problem is computed over.
|
int |
numThreads()
Returns the number of threads to be used by the solver.
|
boolean |
recordEdges()
Returns true if the solver should record the intermediate flow edges
created by calling the methods on
IFDSTabulationProblem.flowFunctions(). |
D |
zeroValue()
This must be a data-flow fact of type
D, but must not
be part of the domain of data-flow facts. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitinitialSeedspublic DefaultIFDSTabulationProblem(I icfg)
protected abstract FlowFunctions<N,D,M> createFlowFunctionsFactory()
protected abstract D createZeroValue()
public final FlowFunctions<N,D,M> flowFunctions()
IFDSTabulationProblemflowFunctions in interface IFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>>public I interproceduralCFG()
IFDSTabulationProbleminterproceduralCFG in interface IFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>>public final D zeroValue()
IFDSTabulationProblemD, but must not
be part of the domain of data-flow facts. Typically this will be a
singleton object of type D that is used for nothing else.
It must holds that this object does not equals any object
within the domain.
NOTE: this method could be called many times. Implementations of this
interface should therefore cache the return value!zeroValue in interface IFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>>public boolean followReturnsPastSeeds()
SolverConfigurationIDESolver will call
the return flow function with a null call site and return site.followReturnsPastSeeds in interface SolverConfigurationpublic boolean autoAddZero()
SolverConfigurationautoAddZero in interface SolverConfiguration#zeroValue()public int numThreads()
SolverConfigurationnumThreads in interface SolverConfigurationpublic boolean computeValues()
SolverConfigurationcomputeValues in interface SolverConfigurationpublic boolean recordEdges()
SolverConfigurationIFDSTabulationProblem.flowFunctions().
These nodes are not used by the solver, but may be useful for debugging the solver
or flow functions (see FlowFunctionDotExport).recordEdges in interface SolverConfiguration