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 Registry( 27 std::make_unique<CheckerRegistry>(plugins, Context.getDiagnostics(), 28 AOptions, checkerRegistrationFns)) { 29 Registry->initializeRegistry(*this); 30 Registry->initializeManager(*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 Registry(std::make_unique<CheckerRegistry>(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