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