AnalysisManager.h revision 261991
155714Skris//== AnalysisManager.h - Path sensitive analysis data manager ------*- C++ -*-// 255714Skris// 355714Skris// The LLVM Compiler Infrastructure 455714Skris// 555714Skris// This file is distributed under the University of Illinois Open Source 655714Skris// License. See LICENSE.TXT for details. 755714Skris// 859191Skris//===----------------------------------------------------------------------===// 959191Skris// 1059191Skris// This file defines the AnalysisManager class that manages the data and policy 1159191Skris// for path sensitive analysis. 1259191Skris// 1359191Skris//===----------------------------------------------------------------------===// 1459191Skris 1559191Skris#ifndef LLVM_CLANG_GR_ANALYSISMANAGER_H 1659191Skris#define LLVM_CLANG_GR_ANALYSISMANAGER_H 1759191Skris 1859191Skris#include "clang/Analysis/AnalysisContext.h" 1959191Skris#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" 2059191Skris#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" 2159191Skris#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h" 2259191Skris#include "clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h" 2359191Skris 2459191Skrisnamespace clang { 2559191Skris 2659191Skrisnamespace ento { 2759191Skris class CheckerManager; 2859191Skris 2959191Skrisclass AnalysisManager : public BugReporterData { 3059191Skris virtual void anchor(); 3159191Skris AnalysisDeclContextManager AnaCtxMgr; 3259191Skris 3359191Skris ASTContext &Ctx; 3459191Skris DiagnosticsEngine &Diags; 3559191Skris const LangOptions &LangOpts; 3659191Skris PathDiagnosticConsumers PathConsumers; 3759191Skris 3859191Skris // Configurable components creators. 3959191Skris StoreManagerCreator CreateStoreMgr; 4059191Skris ConstraintManagerCreator CreateConstraintMgr; 4159191Skris 4259191Skris CheckerManager *CheckerMgr; 4359191Skris 4459191Skrispublic: 4559191Skris AnalyzerOptions &options; 4659191Skris 4759191Skris AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags, 4859191Skris const LangOptions &lang, 4959191Skris const PathDiagnosticConsumers &Consumers, 5059191Skris StoreManagerCreator storemgr, 5159191Skris ConstraintManagerCreator constraintmgr, 5259191Skris CheckerManager *checkerMgr, 5355714Skris AnalyzerOptions &Options); 5455714Skris 5555714Skris ~AnalysisManager(); 5655714Skris 5755714Skris void ClearContexts() { 5855714Skris AnaCtxMgr.clear(); 5955714Skris } 6055714Skris 6155714Skris AnalysisDeclContextManager& getAnalysisDeclContextManager() { 6255714Skris return AnaCtxMgr; 6355714Skris } 6455714Skris 6555714Skris StoreManagerCreator getStoreManagerCreator() { 6655714Skris return CreateStoreMgr; 6755714Skris } 6855714Skris 6955714Skris AnalyzerOptions& getAnalyzerOptions() { 7055714Skris return options; 7155714Skris } 7255714Skris 7355714Skris ConstraintManagerCreator getConstraintManagerCreator() { 7455714Skris return CreateConstraintMgr; 7555714Skris } 7655714Skris 7755714Skris CheckerManager *getCheckerManager() const { return CheckerMgr; } 7855714Skris 7955714Skris virtual ASTContext &getASTContext() { 8055714Skris return Ctx; 8155714Skris } 8255714Skris 8355714Skris virtual SourceManager &getSourceManager() { 8455714Skris return getASTContext().getSourceManager(); 8555714Skris } 8655714Skris 8755714Skris virtual DiagnosticsEngine &getDiagnostic() { 8855714Skris return Diags; 8955714Skris } 9055714Skris 9155714Skris const LangOptions &getLangOpts() const { 9255714Skris return LangOpts; 9355714Skris } 9455714Skris 9555714Skris ArrayRef<PathDiagnosticConsumer*> getPathDiagnosticConsumers() { 9655714Skris return PathConsumers; 9755714Skris } 9855714Skris 9955714Skris void FlushDiagnostics(); 10055714Skris 10155714Skris bool shouldVisualize() const { 10255714Skris return options.visualizeExplodedGraphWithGraphViz || 10355714Skris options.visualizeExplodedGraphWithUbiGraph; 10455714Skris } 10555714Skris 10655714Skris bool shouldInlineCall() const { 10755714Skris return options.getIPAMode() != IPAK_None; 10855714Skris } 10955714Skris 11055714Skris CFG *getCFG(Decl const *D) { 111 return AnaCtxMgr.getContext(D)->getCFG(); 112 } 113 114 template <typename T> 115 T *getAnalysis(Decl const *D) { 116 return AnaCtxMgr.getContext(D)->getAnalysis<T>(); 117 } 118 119 ParentMap &getParentMap(Decl const *D) { 120 return AnaCtxMgr.getContext(D)->getParentMap(); 121 } 122 123 AnalysisDeclContext *getAnalysisDeclContext(const Decl *D) { 124 return AnaCtxMgr.getContext(D); 125 } 126}; 127 128} // enAnaCtxMgrspace 129 130} // end clang namespace 131 132#endif 133