diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 8db7c7a341d..03ccca6b081 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> childList = children(); - if (!childList) - return true; - for (const AstNode &c : qAsConst(*childList)) { - if (c.detailIs("UncheckedDerivedToBase")) + bool hasBaseCast = false; + bool hasRecordType = false; + const QList childList = children().value_or(QList()); + 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 7b7803d98f8..aaf031e6a24 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); }