1*e038c9c4Sjoerg //===- CheckerManager.h - Static Analyzer Checker Manager -------*- C++ -*-===//
2*e038c9c4Sjoerg //
3*e038c9c4Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e038c9c4Sjoerg // See https://llvm.org/LICENSE.txt for license information.
5*e038c9c4Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e038c9c4Sjoerg //
7*e038c9c4Sjoerg //===----------------------------------------------------------------------===//
8*e038c9c4Sjoerg //
9*e038c9c4Sjoerg // Defines the Static Analyzer Checker Manager.
10*e038c9c4Sjoerg //
11*e038c9c4Sjoerg //===----------------------------------------------------------------------===//
12*e038c9c4Sjoerg
13*e038c9c4Sjoerg #include "clang/StaticAnalyzer/Core/CheckerManager.h"
14*e038c9c4Sjoerg #include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h"
15*e038c9c4Sjoerg #include <memory>
16*e038c9c4Sjoerg
17*e038c9c4Sjoerg namespace clang {
18*e038c9c4Sjoerg namespace ento {
19*e038c9c4Sjoerg
CheckerManager(ASTContext & Context,AnalyzerOptions & AOptions,const Preprocessor & PP,ArrayRef<std::string> plugins,ArrayRef<std::function<void (CheckerRegistry &)>> checkerRegistrationFns)20*e038c9c4Sjoerg CheckerManager::CheckerManager(
21*e038c9c4Sjoerg ASTContext &Context, AnalyzerOptions &AOptions, const Preprocessor &PP,
22*e038c9c4Sjoerg ArrayRef<std::string> plugins,
23*e038c9c4Sjoerg ArrayRef<std::function<void(CheckerRegistry &)>> checkerRegistrationFns)
24*e038c9c4Sjoerg : Context(&Context), LangOpts(Context.getLangOpts()), AOptions(AOptions),
25*e038c9c4Sjoerg PP(&PP), Diags(Context.getDiagnostics()),
26*e038c9c4Sjoerg RegistryData(std::make_unique<CheckerRegistryData>()) {
27*e038c9c4Sjoerg CheckerRegistry Registry(*RegistryData, plugins, Context.getDiagnostics(),
28*e038c9c4Sjoerg AOptions, checkerRegistrationFns);
29*e038c9c4Sjoerg Registry.initializeRegistry(*this);
30*e038c9c4Sjoerg Registry.initializeManager(*this);
31*e038c9c4Sjoerg finishedCheckerRegistration();
32*e038c9c4Sjoerg }
33*e038c9c4Sjoerg
CheckerManager(AnalyzerOptions & AOptions,const LangOptions & LangOpts,DiagnosticsEngine & Diags,ArrayRef<std::string> plugins)34*e038c9c4Sjoerg CheckerManager::CheckerManager(AnalyzerOptions &AOptions,
35*e038c9c4Sjoerg const LangOptions &LangOpts,
36*e038c9c4Sjoerg DiagnosticsEngine &Diags,
37*e038c9c4Sjoerg ArrayRef<std::string> plugins)
38*e038c9c4Sjoerg : LangOpts(LangOpts), AOptions(AOptions), Diags(Diags),
39*e038c9c4Sjoerg RegistryData(std::make_unique<CheckerRegistryData>()) {
40*e038c9c4Sjoerg CheckerRegistry Registry(*RegistryData, plugins, Diags, AOptions, {});
41*e038c9c4Sjoerg Registry.initializeRegistry(*this);
42*e038c9c4Sjoerg }
43*e038c9c4Sjoerg
~CheckerManager()44*e038c9c4Sjoerg CheckerManager::~CheckerManager() {
45*e038c9c4Sjoerg for (const auto &CheckerDtor : CheckerDtors)
46*e038c9c4Sjoerg CheckerDtor();
47*e038c9c4Sjoerg }
48*e038c9c4Sjoerg
49*e038c9c4Sjoerg } // namespace ento
50*e038c9c4Sjoerg } // namespace clang
51