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