Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:50

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   }  //end of class
0036 
0037 }  // namespace clangcms