CheckerRegistry.h revision 08b86531ade68727c56918f162816075b87c864a
108b86531ade68727c56918f162816075b87c864aJordy Rose//===--- CheckerRegistry.h - Maintains all available checkers ---*- C++ -*-===// 208b86531ade68727c56918f162816075b87c864aJordy Rose// 308b86531ade68727c56918f162816075b87c864aJordy Rose// The LLVM Compiler Infrastructure 408b86531ade68727c56918f162816075b87c864aJordy Rose// 508b86531ade68727c56918f162816075b87c864aJordy Rose// This file is distributed under the University of Illinois Open Source 608b86531ade68727c56918f162816075b87c864aJordy Rose// License. See LICENSE.TXT for details. 708b86531ade68727c56918f162816075b87c864aJordy Rose// 808b86531ade68727c56918f162816075b87c864aJordy Rose//===----------------------------------------------------------------------===// 908b86531ade68727c56918f162816075b87c864aJordy Rose 1008b86531ade68727c56918f162816075b87c864aJordy Rose#ifndef LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 1108b86531ade68727c56918f162816075b87c864aJordy Rose#define LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 1208b86531ade68727c56918f162816075b87c864aJordy Rose 1308b86531ade68727c56918f162816075b87c864aJordy Rose#include "clang/StaticAnalyzer/Core/CheckerManager.h" 1408b86531ade68727c56918f162816075b87c864aJordy Rose#include "clang/Basic/LLVM.h" 1508b86531ade68727c56918f162816075b87c864aJordy Rose#include <vector> 1608b86531ade68727c56918f162816075b87c864aJordy Rose 1708b86531ade68727c56918f162816075b87c864aJordy Rosenamespace clang { 1808b86531ade68727c56918f162816075b87c864aJordy Rosenamespace ento { 1908b86531ade68727c56918f162816075b87c864aJordy Rose 2008b86531ade68727c56918f162816075b87c864aJordy Roseclass CheckerOptInfo; 2108b86531ade68727c56918f162816075b87c864aJordy Rose 2208b86531ade68727c56918f162816075b87c864aJordy Roseclass CheckerRegistry { 2308b86531ade68727c56918f162816075b87c864aJordy Rosepublic: 2408b86531ade68727c56918f162816075b87c864aJordy Rose typedef void (*InitializationFunction)(CheckerManager &); 2508b86531ade68727c56918f162816075b87c864aJordy Rose struct CheckerInfo { 2608b86531ade68727c56918f162816075b87c864aJordy Rose InitializationFunction Initialize; 2708b86531ade68727c56918f162816075b87c864aJordy Rose StringRef FullName; 2808b86531ade68727c56918f162816075b87c864aJordy Rose StringRef Desc; 2908b86531ade68727c56918f162816075b87c864aJordy Rose 3008b86531ade68727c56918f162816075b87c864aJordy Rose CheckerInfo(InitializationFunction fn, StringRef name, StringRef desc) 3108b86531ade68727c56918f162816075b87c864aJordy Rose : Initialize(fn), FullName(name), Desc(desc) {} 3208b86531ade68727c56918f162816075b87c864aJordy Rose }; 3308b86531ade68727c56918f162816075b87c864aJordy Rose 3408b86531ade68727c56918f162816075b87c864aJordy Rose typedef std::vector<CheckerInfo> CheckerInfoList; 3508b86531ade68727c56918f162816075b87c864aJordy Rose 3608b86531ade68727c56918f162816075b87c864aJordy Roseprivate: 3708b86531ade68727c56918f162816075b87c864aJordy Rose template <typename T> 3808b86531ade68727c56918f162816075b87c864aJordy Rose static void initializeManager(CheckerManager &mgr) { 3908b86531ade68727c56918f162816075b87c864aJordy Rose mgr.registerChecker<T>(); 4008b86531ade68727c56918f162816075b87c864aJordy Rose } 4108b86531ade68727c56918f162816075b87c864aJordy Rose 4208b86531ade68727c56918f162816075b87c864aJordy Rosepublic: 4308b86531ade68727c56918f162816075b87c864aJordy Rose void addChecker(InitializationFunction fn, StringRef fullName, 4408b86531ade68727c56918f162816075b87c864aJordy Rose StringRef desc); 4508b86531ade68727c56918f162816075b87c864aJordy Rose 4608b86531ade68727c56918f162816075b87c864aJordy Rose template <class T> 4708b86531ade68727c56918f162816075b87c864aJordy Rose void addChecker(StringRef fullName, StringRef desc) { 4808b86531ade68727c56918f162816075b87c864aJordy Rose addChecker(&initializeManager<T>, fullName, desc); 4908b86531ade68727c56918f162816075b87c864aJordy Rose } 5008b86531ade68727c56918f162816075b87c864aJordy Rose 5108b86531ade68727c56918f162816075b87c864aJordy Rose void initializeManager(CheckerManager &mgr, 5208b86531ade68727c56918f162816075b87c864aJordy Rose SmallVectorImpl<CheckerOptInfo> &opts) const; 5308b86531ade68727c56918f162816075b87c864aJordy Rose void printHelp(raw_ostream &out, size_t maxNameChars = 30) const ; 5408b86531ade68727c56918f162816075b87c864aJordy Rose 5508b86531ade68727c56918f162816075b87c864aJordy Roseprivate: 5608b86531ade68727c56918f162816075b87c864aJordy Rose mutable CheckerInfoList Checkers; 5708b86531ade68727c56918f162816075b87c864aJordy Rose mutable llvm::StringMap<size_t> Packages; 5808b86531ade68727c56918f162816075b87c864aJordy Rose}; 5908b86531ade68727c56918f162816075b87c864aJordy Rose 6008b86531ade68727c56918f162816075b87c864aJordy Rose} // end namespace ento 6108b86531ade68727c56918f162816075b87c864aJordy Rose} // end namespace clang 6208b86531ade68727c56918f162816075b87c864aJordy Rose 6308b86531ade68727c56918f162816075b87c864aJordy Rose#endif 64