AnalysisManager.h revision 243830
1218887Sdim//== AnalysisManager.h - Path sensitive analysis data manager ------*- C++ -*-// 2218887Sdim// 3218887Sdim// The LLVM Compiler Infrastructure 4218887Sdim// 5218887Sdim// This file is distributed under the University of Illinois Open Source 6218887Sdim// License. See LICENSE.TXT for details. 7218887Sdim// 8218887Sdim//===----------------------------------------------------------------------===// 9218887Sdim// 10218887Sdim// This file defines the AnalysisManager class that manages the data and policy 11218887Sdim// for path sensitive analysis. 12218887Sdim// 13218887Sdim//===----------------------------------------------------------------------===// 14218887Sdim 15218887Sdim#ifndef LLVM_CLANG_GR_ANALYSISMANAGER_H 16218887Sdim#define LLVM_CLANG_GR_ANALYSISMANAGER_H 17218887Sdim 18218887Sdim#include "clang/Analysis/AnalysisContext.h" 19243830Sdim#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" 20218887Sdim#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" 21218887Sdim#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h" 22239462Sdim#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h" 23218887Sdim 24218887Sdimnamespace clang { 25218887Sdim 26218887Sdimnamespace ento { 27218887Sdim class CheckerManager; 28218887Sdim 29218887Sdimclass AnalysisManager : public BugReporterData { 30234353Sdim virtual void anchor(); 31234353Sdim AnalysisDeclContextManager AnaCtxMgr; 32218887Sdim 33218887Sdim ASTContext &Ctx; 34226633Sdim DiagnosticsEngine &Diags; 35234353Sdim const LangOptions &LangOpts; 36239462Sdim PathDiagnosticConsumers PathConsumers; 37218887Sdim 38218887Sdim // Configurable components creators. 39218887Sdim StoreManagerCreator CreateStoreMgr; 40218887Sdim ConstraintManagerCreator CreateConstraintMgr; 41218887Sdim 42218887Sdim CheckerManager *CheckerMgr; 43218887Sdim 44218887Sdimpublic: 45243830Sdim AnalyzerOptions &options; 46243830Sdim 47239462Sdim AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags, 48239462Sdim const LangOptions &lang, 49239462Sdim const PathDiagnosticConsumers &Consumers, 50218887Sdim StoreManagerCreator storemgr, 51218887Sdim ConstraintManagerCreator constraintmgr, 52218887Sdim CheckerManager *checkerMgr, 53243830Sdim AnalyzerOptions &Options); 54218887Sdim 55239462Sdim ~AnalysisManager(); 56218887Sdim 57218887Sdim void ClearContexts() { 58218887Sdim AnaCtxMgr.clear(); 59218887Sdim } 60218887Sdim 61234353Sdim AnalysisDeclContextManager& getAnalysisDeclContextManager() { 62218887Sdim return AnaCtxMgr; 63218887Sdim } 64218887Sdim 65218887Sdim StoreManagerCreator getStoreManagerCreator() { 66218887Sdim return CreateStoreMgr; 67218887Sdim } 68218887Sdim 69218887Sdim ConstraintManagerCreator getConstraintManagerCreator() { 70218887Sdim return CreateConstraintMgr; 71218887Sdim } 72218887Sdim 73218887Sdim CheckerManager *getCheckerManager() const { return CheckerMgr; } 74218887Sdim 75218887Sdim virtual ASTContext &getASTContext() { 76218887Sdim return Ctx; 77218887Sdim } 78218887Sdim 79218887Sdim virtual SourceManager &getSourceManager() { 80218887Sdim return getASTContext().getSourceManager(); 81218887Sdim } 82218887Sdim 83226633Sdim virtual DiagnosticsEngine &getDiagnostic() { 84218887Sdim return Diags; 85218887Sdim } 86218887Sdim 87234353Sdim const LangOptions &getLangOpts() const { 88234353Sdim return LangOpts; 89218887Sdim } 90218887Sdim 91239462Sdim ArrayRef<PathDiagnosticConsumer*> getPathDiagnosticConsumers() { 92239462Sdim return PathConsumers; 93218887Sdim } 94218887Sdim 95239462Sdim void FlushDiagnostics(); 96239462Sdim 97218887Sdim bool shouldVisualize() const { 98243830Sdim return options.visualizeExplodedGraphWithGraphViz || 99243830Sdim options.visualizeExplodedGraphWithUbiGraph; 100218887Sdim } 101218887Sdim 102243830Sdim bool shouldInlineCall() const { 103243830Sdim return options.IPAMode != None; 104243830Sdim } 105218887Sdim 106218887Sdim CFG *getCFG(Decl const *D) { 107218887Sdim return AnaCtxMgr.getContext(D)->getCFG(); 108218887Sdim } 109218887Sdim 110226633Sdim template <typename T> 111226633Sdim T *getAnalysis(Decl const *D) { 112226633Sdim return AnaCtxMgr.getContext(D)->getAnalysis<T>(); 113218887Sdim } 114218887Sdim 115218887Sdim ParentMap &getParentMap(Decl const *D) { 116218887Sdim return AnaCtxMgr.getContext(D)->getParentMap(); 117218887Sdim } 118218887Sdim 119234353Sdim AnalysisDeclContext *getAnalysisDeclContext(const Decl *D) { 120218887Sdim return AnaCtxMgr.getContext(D); 121218887Sdim } 122218887Sdim}; 123218887Sdim 124234353Sdim} // enAnaCtxMgrspace 125218887Sdim 126218887Sdim} // end clang namespace 127218887Sdim 128218887Sdim#endif 129