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