aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-05-28 16:06:07 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-06-16 15:30:29 +0000
commit692995ec882b79d3f10f643e87e7b0fbf18f0233 (patch)
tree5859ef01325f160b7dbdddb6e88cf27d934f5e5a
parentd4c36f43b0bdf7594bf3ce8652a9250623f41dee (diff)
ClangCodeModel: Tighten the check for qualified member function call
Just checking for the base cast is not enough. Change-Id: I455533b7da31cf5c52d8c1b9dd93b3bb2fb58929 Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp14
-rw-r--r--src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp11
2 files changed, 15 insertions, 10 deletions
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 8db7c7a341..03ccca6b08 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -156,11 +156,15 @@ public:
{
if (!isMemberFunctionCall())
return false;
- const Utils::optional<QList<AstNode>> childList = children();
- if (!childList)
- return true;
- for (const AstNode &c : qAsConst(*childList)) {
- if (c.detailIs("UncheckedDerivedToBase"))
+ bool hasBaseCast = false;
+ bool hasRecordType = false;
+ const QList<AstNode> childList = children().value_or(QList<AstNode>());
+ for (const AstNode &c : childList) {
+ if (!hasBaseCast && c.detailIs("UncheckedDerivedToBase"))
+ hasBaseCast = true;
+ if (!hasRecordType && c.role() == "specifier" && c.kind() == "TypeSpec")
+ hasRecordType = true;
+ if (hasBaseCast && hasRecordType)
return false;
}
return true;
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index 7b7803d98f..aaf031e6a2 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -446,9 +446,6 @@ F2TestCase::F2TestCase(CppEditorAction action,
});
t.start(10000);
l.exec();
- QEXPECT_FAIL("noSiblings_references", "FIXME: check why this fails", Abort);
- QEXPECT_FAIL("noSiblings_pointers", "FIXME: check why this fails", Abort);
- QEXPECT_FAIL("noSiblings_noBaseExpression", "FIXME: check why this fails", Abort);
QVERIFY(immediateProposal);
QVERIFY(finalProposal);
immediateVirtualSymbolResults = VirtualFunctionTestAssistProvider::itemList(
@@ -507,8 +504,12 @@ F2TestCase::F2TestCase(CppEditorAction action,
expectedImmediate << OverrideItem(QLatin1String("collecting overrides ..."));
}
QCOMPARE(immediateVirtualSymbolResults, expectedImmediate);
- if (useClangd)
- QEXPECT_FAIL("allOverrides from base declaration", "FIXME: check why this fails", Abort);
+ if (useClangd) {
+ QEXPECT_FAIL("allOverrides from base declaration", "FIXME: too many results", Abort);
+ QEXPECT_FAIL("noSiblings_references", "FIXME: too many results", Abort);
+ QEXPECT_FAIL("noSiblings_pointers", "FIXME: too many results", Abort);
+ QEXPECT_FAIL("noSiblings_noBaseExpression", "FIXME: too many results", Abort);
+ }
QCOMPARE(finalVirtualSymbolResults.size(), expectedVirtualFunctionProposal.size());
QCOMPARE(finalVirtualSymbolResults, expectedVirtualFunctionProposal);
}