diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-05-28 16:06:07 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-06-16 15:30:29 +0000 |
commit | 692995ec882b79d3f10f643e87e7b0fbf18f0233 (patch) | |
tree | 5859ef01325f160b7dbdddb6e88cf27d934f5e5a | |
parent | d4c36f43b0bdf7594bf3ce8652a9250623f41dee (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.cpp | 14 | ||||
-rw-r--r-- | src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp | 11 |
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); } |