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(*this); 30 Registry.initializeManager(*this); 31 } 32 33 CheckerManager::CheckerManager(AnalyzerOptions &AOptions, 34 const LangOptions &LangOpts, 35 DiagnosticsEngine &Diags, 36 ArrayRef<std::string> plugins) 37 : LangOpts(LangOpts), AOptions(AOptions), Diags(Diags), 38 RegistryData(std::make_unique<CheckerRegistryData>()) { 39 CheckerRegistry Registry(*RegistryData, plugins, Diags, AOptions, {}); 40 Registry.initializeRegistry(*this); 41 } 42 43 CheckerManager::~CheckerManager() { 44 for (const auto &CheckerDtor : CheckerDtors) 45 CheckerDtor(); 46 } 47 48 } // namespace ento 49 } // namespace clang 50