diff options
Diffstat (limited to 'src/checks/level2/missing-qobject-macro.cpp')
-rw-r--r-- | src/checks/level2/missing-qobject-macro.cpp | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/checks/level2/missing-qobject-macro.cpp b/src/checks/level2/missing-qobject-macro.cpp index 79c700cb..1828aef1 100644 --- a/src/checks/level2/missing-qobject-macro.cpp +++ b/src/checks/level2/missing-qobject-macro.cpp @@ -22,11 +22,9 @@ #include <llvm/Config/llvm-config.h> #include "missing-qobject-macro.h" - #include "ClazyContext.h" #include "Utils.h" #include "QtUtils.h" -#include "checkmanager.h" #include "StringUtils.h" #include <clang/AST/AST.h> @@ -36,23 +34,23 @@ using namespace clang; using namespace std; -MissingQ_OBJECT::MissingQ_OBJECT(const std::string &name, ClazyContext *context) +MissingQObjectMacro::MissingQObjectMacro(const std::string &name, ClazyContext *context) : CheckBase(name, context) { enablePreProcessorCallbacks(); } -void MissingQ_OBJECT::VisitMacroExpands(const clang::Token &MacroNameTok, const clang::SourceRange &range) +void MissingQObjectMacro::VisitMacroExpands(const clang::Token &MacroNameTok, const clang::SourceRange &range, const MacroInfo *) { IdentifierInfo *ii = MacroNameTok.getIdentifierInfo(); if (ii && ii->getName() == "Q_OBJECT") registerQ_OBJECT(range.getBegin()); } -void MissingQ_OBJECT::VisitDecl(clang::Decl *decl) +void MissingQObjectMacro::VisitDecl(clang::Decl *decl) { CXXRecordDecl *record = dyn_cast<CXXRecordDecl>(decl); - if (!record || !record->hasDefinition() || record->getDefinition() != record || !QtUtils::isQObject(record)) + if (!record || !record->hasDefinition() || record->getDefinition() != record || !clazy::isQObject(record)) return; if (record->getDescribedClassTemplate() != nullptr) // moc doesn't accept Q_OBJECT in templates @@ -61,22 +59,20 @@ void MissingQ_OBJECT::VisitDecl(clang::Decl *decl) if (m_context->usingPreCompiledHeaders()) return; - const SourceLocation startLoc = decl->getLocStart(); + const SourceLocation startLoc = getLocStart(decl); for (const SourceLocation &loc : m_qobjectMacroLocations) { if (sm().getFileID(loc) != sm().getFileID(startLoc)) continue; // Different file - if (sm().isBeforeInSLocAddrSpace(startLoc, loc) && sm().isBeforeInSLocAddrSpace(loc, decl->getLocEnd())) + if (sm().isBeforeInSLocAddrSpace(startLoc, loc) && sm().isBeforeInSLocAddrSpace(loc, getLocEnd(decl))) return; // We found a Q_OBJECT after start and before end, it's ours. } emitWarning(startLoc, record->getQualifiedNameAsString() + " is missing a Q_OBJECT macro"); } -void MissingQ_OBJECT::registerQ_OBJECT(SourceLocation loc) +void MissingQObjectMacro::registerQ_OBJECT(SourceLocation loc) { m_qobjectMacroLocations.push_back(loc); } - -REGISTER_CHECK("missing-qobject-macro", MissingQ_OBJECT, CheckLevel2) |