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>
IFDSTabulationProblem
s 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 IFDSTabulationProblem
s.
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, wait
initialSeeds
public DefaultIFDSTabulationProblem(I icfg)
protected abstract FlowFunctions<N,D,M> createFlowFunctionsFactory()
protected abstract D createZeroValue()
public final FlowFunctions<N,D,M> flowFunctions()
IFDSTabulationProblem
flowFunctions
in interface IFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>>
public I interproceduralCFG()
IFDSTabulationProblem
interproceduralCFG
in interface IFDSTabulationProblem<N,D,M,I extends InterproceduralCFG<N,M>>
public final D zeroValue()
IFDSTabulationProblem
D
, 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()
SolverConfiguration
IDESolver
will call
the return flow function with a null
call site and return site.followReturnsPastSeeds
in interface SolverConfiguration
public boolean autoAddZero()
SolverConfiguration
autoAddZero
in interface SolverConfiguration
#zeroValue()
public int numThreads()
SolverConfiguration
numThreads
in interface SolverConfiguration
public boolean computeValues()
SolverConfiguration
computeValues
in interface SolverConfiguration
public boolean recordEdges()
SolverConfiguration
IFDSTabulationProblem.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