Class ModularWorstCaseAnalysis<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>>

  • Type Parameters:
    A - the abstract state of the analysis
    H - the heap domain
    V - the value domain
    T - the type domain
    All Implemented Interfaces:
    it.unive.lisa.interprocedural.InterproceduralAnalysis<A,​H,​V,​T>

    public class ModularWorstCaseAnalysis<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>
    A worst case modular analysis were all cfg calls are treated as open calls.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void fixpoint​(it.unive.lisa.analysis.AnalysisState<A,​H,​V,​T> entryState, java.lang.Class<? extends it.unive.lisa.util.collections.workset.WorkingSet<it.unive.lisa.program.cfg.statement.Statement>> fixpointWorkingSet, int wideningThreshold)  
      it.unive.lisa.analysis.AnalysisState<A,​H,​V,​T> getAbstractResultOf​(it.unive.lisa.program.cfg.statement.call.CFGCall 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)  
      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)  
      java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,​H,​V,​T>> getAnalysisResultsOf​(it.unive.lisa.program.cfg.CFG cfg)  
      void init​(it.unive.lisa.program.Application app, it.unive.lisa.interprocedural.callgraph.CallGraph callgraph, it.unive.lisa.interprocedural.OpenCallPolicy policy)  
      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)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ModularWorstCaseAnalysis

        public ModularWorstCaseAnalysis()
        Builds the interprocedural analysis.
    • Method Detail

      • fixpoint

        public void fixpoint​(it.unive.lisa.analysis.AnalysisState<A,​H,​V,​T> entryState,
                             java.lang.Class<? extends it.unive.lisa.util.collections.workset.WorkingSet<it.unive.lisa.program.cfg.statement.Statement>> fixpointWorkingSet,
                             int wideningThreshold)
                      throws it.unive.lisa.util.datastructures.graph.algorithms.FixpointException
        Specified by:
        fixpoint in interface it.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.util.datastructures.graph.algorithms.FixpointException
      • getAnalysisResultsOf

        public java.util.Collection<it.unive.lisa.analysis.CFGWithAnalysisResults<A,​H,​V,​T>> getAnalysisResultsOf​(it.unive.lisa.program.cfg.CFG cfg)
        Specified by:
        getAnalysisResultsOf in interface it.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>>
      • getAbstractResultOf

        public it.unive.lisa.analysis.AnalysisState<A,​H,​V,​T> getAbstractResultOf​(it.unive.lisa.program.cfg.statement.call.CFGCall 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 interface it.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
      • 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 interface it.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
      • 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 interface it.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 interface it.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