diff options
author | Sergio Martins <smartins@kde.org> | 2018-11-09 09:56:21 +0000 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2018-11-09 09:56:21 +0000 |
commit | 8552b8c2a2eb6091da67404d3d6a18b2d74774cb (patch) | |
tree | 909b52004512eead4ab754248b3b8ebb3a671feb | |
parent | 573d546d7873d2c3cae6852c8c0444df3a4421ed (diff) |
fully-qualified-moc-types: Some refactoring before a bug fix
Introduced fully-qualified-moc-types
-rw-r--r-- | src/checks/level0/fully-qualified-moc-types.cpp | 28 | ||||
-rw-r--r-- | src/checks/level0/fully-qualified-moc-types.h | 2 |
2 files changed, 20 insertions, 10 deletions
diff --git a/src/checks/level0/fully-qualified-moc-types.cpp b/src/checks/level0/fully-qualified-moc-types.cpp index 11b8ab11..f47037d5 100644 --- a/src/checks/level0/fully-qualified-moc-types.cpp +++ b/src/checks/level0/fully-qualified-moc-types.cpp @@ -79,20 +79,28 @@ void FullyQualifiedMocTypes::VisitDecl(clang::Decl *decl) for (auto param : method->parameters()) { QualType t = TypeUtils::pointeeQualType(param->getType()); - if (!t.isNull()) { - std::string typeName = clazy::name(t, lo(), /*asWritten=*/ true); - if (typeName == "QPrivateSignal") - continue; - - std::string qualifiedTypeName = clazy::name(t, lo(), /*asWritten=*/ false); - - if (typeName != qualifiedTypeName) { - emitWarning(method, string(accessSpecifierManager->qtAccessSpecifierTypeStr(qst)) + " arguments need to be fully-qualified (" + qualifiedTypeName + " instead of " + typeName + ")"); - } + string qualifiedTypeName; + string typeName; + if (!typeIsFullyQualified(t, /*by-ref*/qualifiedTypeName, /*by-ref*/typeName)) { + emitWarning(method, string(accessSpecifierManager->qtAccessSpecifierTypeStr(qst)) + " arguments need to be fully-qualified (" + qualifiedTypeName + " instead of " + typeName + ")"); } } } +bool FullyQualifiedMocTypes::typeIsFullyQualified(QualType t, string &qualifiedTypeName, string &typeName) const +{ + if (!t.isNull()) { + typeName = clazy::name(t, lo(), /*asWritten=*/ true); + if (typeName == "QPrivateSignal") + return true; + + qualifiedTypeName = clazy::name(t, lo(), /*asWritten=*/ false); + return typeName == qualifiedTypeName; + } else { + return true; + } +} + bool FullyQualifiedMocTypes::isGadget(CXXRecordDecl *record) const { SourceLocation startLoc = getLocStart(record); diff --git a/src/checks/level0/fully-qualified-moc-types.h b/src/checks/level0/fully-qualified-moc-types.h index 870f8a4a..82260e04 100644 --- a/src/checks/level0/fully-qualified-moc-types.h +++ b/src/checks/level0/fully-qualified-moc-types.h @@ -52,6 +52,8 @@ private: void VisitMacroExpands(const clang::Token &MacroNameTok, const clang::SourceRange &range, const clang::MacroInfo *minfo = nullptr) override; void registerQ_GADGET(clang::SourceLocation); + bool typeIsFullyQualified(clang::QualType t, std::string &qualifiedTypeName, std::string &typeName) const; + std::vector<clang::SourceLocation> m_qgadgetMacroLocations; }; #endif |