1218887Sdim//===-- AnalysisManager.cpp -------------------------------------*- 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#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
11218887Sdim
12218887Sdimusing namespace clang;
13218887Sdimusing namespace ento;
14218887Sdim
15234353Sdimvoid AnalysisManager::anchor() { }
16234353Sdim
17226633SdimAnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
18226633Sdim                                 const LangOptions &lang,
19239462Sdim                                 const PathDiagnosticConsumers &PDC,
20226633Sdim                                 StoreManagerCreator storemgr,
21226633Sdim                                 ConstraintManagerCreator constraintmgr,
22226633Sdim                                 CheckerManager *checkerMgr,
23243830Sdim                                 AnalyzerOptions &Options)
24243830Sdim  : AnaCtxMgr(Options.UnoptimizedCFG,
25243830Sdim              /*AddImplicitDtors=*/true,
26243830Sdim              /*AddInitializers=*/true,
27243830Sdim              Options.includeTemporaryDtorsInCFG(),
28249423Sdim              Options.shouldSynthesizeBodies(),
29249423Sdim              Options.shouldConditionalizeStaticInitializers()),
30243830Sdim    Ctx(ctx),
31243830Sdim    Diags(diags),
32243830Sdim    LangOpts(lang),
33239462Sdim    PathConsumers(PDC),
34226633Sdim    CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
35243830Sdim    CheckerMgr(checkerMgr),
36243830Sdim    options(Options) {
37226633Sdim  AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
38226633Sdim}
39226633Sdim
40239462SdimAnalysisManager::~AnalysisManager() {
41239462Sdim  FlushDiagnostics();
42239462Sdim  for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
43239462Sdim       E = PathConsumers.end(); I != E; ++I) {
44239462Sdim    delete *I;
45239462Sdim  }
46226633Sdim}
47239462Sdim
48239462Sdimvoid AnalysisManager::FlushDiagnostics() {
49239462Sdim  PathDiagnosticConsumer::FilesMade filesMade;
50239462Sdim  for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
51239462Sdim       E = PathConsumers.end();
52239462Sdim       I != E; ++I) {
53239462Sdim    (*I)->FlushDiagnostics(&filesMade);
54239462Sdim  }
55239462Sdim}
56