aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2018-11-09 09:56:21 +0000
committerSergio Martins <smartins@kde.org>2018-11-09 09:56:21 +0000
commit8552b8c2a2eb6091da67404d3d6a18b2d74774cb (patch)
tree909b52004512eead4ab754248b3b8ebb3a671feb
parent573d546d7873d2c3cae6852c8c0444df3a4421ed (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.cpp28
-rw-r--r--src/checks/level0/fully-qualified-moc-types.h2
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