public abstract class AbstractInterproceduralAnalysis extends Object
Modifier and Type | Field and Description |
---|---|
protected CallGraph |
cg |
protected Map |
data |
protected DirectedGraph |
dg |
static boolean |
doCheck |
protected Map<Object,Integer> |
order |
protected Map |
unanalysed |
Constructor and Description |
---|
AbstractInterproceduralAnalysis(CallGraph cg,
SootMethodFilter filter,
Iterator heads,
boolean verbose)
The constructor performs some preprocessing, but you have to call
doAnalysis to preform the real stuff.
|
Modifier and Type | Method and Description |
---|---|
protected void |
analyseCall(Object src,
Stmt callStmt,
Object dst)
Analyse the call callStmt in the context src, and put the resul into
dst.
|
protected abstract void |
analyseMethod(SootMethod method,
Object dst)
Compute the summary for a method by analysing its body.
|
protected abstract void |
applySummary(Object src,
Stmt callStmt,
Object summary,
Object dst)
Interprocedural analysis will call applySummary repeatedly as a
consequence to analyseCall.
|
protected abstract void |
copy(Object sr,
Object dst)
Copy src into dst.
|
protected void |
doAnalysis(boolean verbose)
Carry out the analysis.
|
void |
drawAsManyDot(String prefix,
boolean drawUnanalysed)
Dump the each summary computed by the interprocedural analysis as
a seperate graph.
|
void |
drawAsOneDot(String name)
Dump the interprocedural analysis result as a graph.
|
protected void |
fillDotGraph(String prefix,
Object o,
DotGraph out)
Called by drawAsOneDot to fill dot subgraph out with the contents
of summary o.
|
Iterator |
getAnalysedMethods()
Get an iterator over the list of SootMethod with an associated summary.
|
Object |
getSummaryFor(SootMethod m)
Query the analysis result.
|
protected abstract void |
merge(Object in1,
Object in2,
Object out)
Merge in1 and in2 into out.
|
protected abstract Object |
newInitialSummary()
Initial summary value for analysed funtions.
|
protected abstract Object |
summaryOfUnanalysedMethod(SootMethod method)
Whenever the analyse requires the summary of a method you filtered-out,
this function is called instead of analyseMethod.
|
public static final boolean doCheck
protected CallGraph cg
protected DirectedGraph dg
protected Map data
protected Map unanalysed
public AbstractInterproceduralAnalysis(CallGraph cg, SootMethodFilter filter, Iterator heads, boolean verbose)
protected abstract Object newInitialSummary()
protected abstract Object summaryOfUnanalysedMethod(SootMethod method)
Note: This function is called at most once per filtered-out method. It is the equivalent of entryInitialFlow!
protected abstract void analyseMethod(SootMethod method, Object dst)
method
- is the method to be analyseddst
- is where to put the computed method summaryprotected abstract void applySummary(Object src, Stmt callStmt, Object summary, Object dst)
src
- summary valid before the call statementcallStmt
- a statement containing a InvokeStmt or InvokeExprsummary
- summary of the possible target of callStmt considered
heredst
- where to put the resultanalyseCall
protected abstract void merge(Object in1, Object in2, Object out)
Note: in1 or in2 can be aliased to out (e.g., analyseCall).
protected void fillDotGraph(String prefix, Object o, DotGraph out)
prefix
- gives you a unique string to prefix your node names
and avoid name-clashprotected void analyseCall(Object src, Stmt callStmt, Object dst)
summaryOfUnanalysedMethod
,
applySummary
public void drawAsOneDot(String name)
Note: this graph does not show filtered-out methods for which a conservative summary was asked via summaryOfUnanalysedMethod.
name
- output filenamefillDotGraph
public void drawAsManyDot(String prefix, boolean drawUnanalysed)
prefix
- is prepended before method name in output filenamedrawUnanalysed
- do you also want info for the unanalysed methods
required by the analysis via summaryOfUnanalysedMethod ?fillDotGraph
public Object getSummaryFor(SootMethod m)
public Iterator getAnalysedMethods()
protected void doAnalysis(boolean verbose)