Package it.unive.lisa.interprocedural
Class CallGraphBasedAnalysis<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>
- java.lang.Object
-
- it.unive.lisa.interprocedural.CallGraphBasedAnalysis<A,H,V,T>
-
- Type Parameters:
A
- The abstract state of the analysisH
- The heap domainV
- The value domainT
- The type domain
- All Implemented Interfaces:
it.unive.lisa.interprocedural.InterproceduralAnalysis<A,H,V,T>
- Direct Known Subclasses:
ContextBasedAnalysis
public abstract class CallGraphBasedAnalysis<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>> extends java.lang.Object implements it.unive.lisa.interprocedural.InterproceduralAnalysis<A,H,V,T>
An interprocedural analysis based on a call graph.
-
-
Field Summary
Fields Modifier and Type Field Description protected it.unive.lisa.program.Application
app
The application.protected it.unive.lisa.interprocedural.callgraph.CallGraph
callgraph
The call graph used to resolve method calls.protected it.unive.lisa.interprocedural.OpenCallPolicy
policy
The policy to evaluate results of open calls.
-
Constructor Summary
Constructors Constructor Description CallGraphBasedAnalysis()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description it.unive.lisa.analysis.AnalysisState<A,H,V,T>
getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.OpenCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions)
void
init(it.unive.lisa.program.Application app, it.unive.lisa.interprocedural.callgraph.CallGraph callgraph, it.unive.lisa.interprocedural.OpenCallPolicy policy)
it.unive.lisa.analysis.AnalysisState<A,H,V,T>
prepareEntryStateOfEntryPoint(it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.program.cfg.CFG cfg)
Prepare and entry state for the analysis of a method by renaming parameters.it.unive.lisa.program.cfg.statement.call.Call
resolve(it.unive.lisa.program.cfg.statement.call.UnresolvedCall call, java.util.Set<it.unive.lisa.type.Type>[] types, it.unive.lisa.analysis.symbols.SymbolAliasing aliasing)
-
-
-
Field Detail
-
callgraph
protected it.unive.lisa.interprocedural.callgraph.CallGraph callgraph
The call graph used to resolve method calls.
-
app
protected it.unive.lisa.program.Application app
The application.
-
policy
protected it.unive.lisa.interprocedural.OpenCallPolicy policy
The policy to evaluate results of open calls.
-
-
Method Detail
-
init
public void init(it.unive.lisa.program.Application app, it.unive.lisa.interprocedural.callgraph.CallGraph callgraph, it.unive.lisa.interprocedural.OpenCallPolicy policy) throws it.unive.lisa.interprocedural.InterproceduralAnalysisException
- Specified by:
init
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>
- Throws:
it.unive.lisa.interprocedural.InterproceduralAnalysisException
-
resolve
public it.unive.lisa.program.cfg.statement.call.Call resolve(it.unive.lisa.program.cfg.statement.call.UnresolvedCall call, java.util.Set<it.unive.lisa.type.Type>[] types, it.unive.lisa.analysis.symbols.SymbolAliasing aliasing) throws it.unive.lisa.interprocedural.callgraph.CallResolutionException
- Specified by:
resolve
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>
- Throws:
it.unive.lisa.interprocedural.callgraph.CallResolutionException
-
prepareEntryStateOfEntryPoint
public it.unive.lisa.analysis.AnalysisState<A,H,V,T> prepareEntryStateOfEntryPoint(it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.program.cfg.CFG cfg) throws it.unive.lisa.analysis.SemanticException
Prepare and entry state for the analysis of a method by renaming parameters.- Parameters:
entryState
- the initial entry statecfg
- the CFG of the method- Returns:
- the entry state with the right parameter binding
- Throws:
it.unive.lisa.analysis.SemanticException
- if the analysis fails
-
getAbstractResultOf
public it.unive.lisa.analysis.AnalysisState<A,H,V,T> getAbstractResultOf(it.unive.lisa.program.cfg.statement.call.OpenCall call, it.unive.lisa.analysis.AnalysisState<A,H,V,T> entryState, it.unive.lisa.analysis.lattices.ExpressionSet<it.unive.lisa.symbolic.SymbolicExpression>[] parameters, it.unive.lisa.analysis.StatementStore<A,H,V,T> expressions) throws it.unive.lisa.analysis.SemanticException
- Specified by:
getAbstractResultOf
in interfaceit.unive.lisa.interprocedural.InterproceduralAnalysis<A extends it.unive.lisa.analysis.AbstractState<A,H,V,T>,H extends it.unive.lisa.analysis.heap.HeapDomain<H>,V extends it.unive.lisa.analysis.value.ValueDomain<V>,T extends it.unive.lisa.analysis.value.TypeDomain<T>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
-