File indexing completed on 2023-03-17 11:26:52
0001 #include "edmChecker.h"
0002 using namespace clang;
0003 using namespace clang::ento;
0004 using namespace llvm;
0005
0006 namespace clangcms {
0007
0008 void edmChecker::checkASTDecl(const clang::CXXRecordDecl *RD,
0009 clang::ento::AnalysisManager &mgr,
0010 clang::ento::BugReporter &BR) const {
0011 if (!RD->hasDefinition())
0012 return;
0013 const clang::SourceManager &SM = BR.getSourceManager();
0014 for (auto J = RD->bases_begin(), F = RD->bases_end(); J != F; ++J) {
0015 auto BRD = J->getType()->getAsCXXRecordDecl();
0016 if (!BRD)
0017 continue;
0018 std::string bname = BRD->getQualifiedNameAsString();
0019 if (bname == "edm::EDProducer" || bname == "edm::EDFilter" || bname == "edm::EDAnalyzer" ||
0020 bname == "edm::OutputModule") {
0021 llvm::SmallString<100> buf;
0022 llvm::raw_svector_ostream os(buf);
0023 os << RD->getQualifiedNameAsString()
0024 << " inherits from edm::EDProducer,edm::EDFilter,edm::EDAnalyzer, or edm::OutputModule";
0025 os << "\n";
0026 clang::ento::PathDiagnosticLocation ELoc = clang::ento::PathDiagnosticLocation::createBegin(RD, SM);
0027 BR.EmitBasicReport(RD,
0028 this,
0029 "inherits from edm::EDProducer,edm::EDFilter,edm::EDAnalyzer, or edm::OutputModule",
0030 "Deprecated API",
0031 os.str(),
0032 ELoc);
0033 }
0034 }
0035 }
0036
0037 }