xref: /netbsd-src/external/apache2/llvm/dist/clang/lib/StaticAnalyzer/Frontend/CreateCheckerManager.cpp (revision e038c9c4676b0f19b1b7dd08a940c6ed64a6d5ae)
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