diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp index 6c21eefa13fba6b2b8e568a1b39b060630621636..f593074d2dd95fc9cd2be84cf8acc2f988b383e3 100644 --- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp +++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp @@ -126,7 +126,7 @@ public: hintItem->setOrder(-1000); QList<BasicProposalItem *> items; - items << itemFromFunction(maybeDefinitionFor(m_params.function)); + items << itemFromFunction(m_params.function); items << hintItem; return new VirtualFunctionProposal(m_params.cursorPosition, new BasicProposalItemListModel(items), @@ -151,7 +151,7 @@ public: QList<BasicProposalItem *> items; foreach (Function *func, overrides) - items << itemFromFunction(maybeDefinitionFor(func)); + items << itemFromFunction(func); items.first()->setOrder(1000); // Ensure top position for function of static type return new VirtualFunctionProposal(m_params.cursorPosition, @@ -160,7 +160,7 @@ public: } private: - Function *maybeDefinitionFor(Function *func) + Function *maybeDefinitionFor(Function *func) const { if (Function *definition = m_finder.findMatchingDefinition(func, m_params.snapshot)) return definition; @@ -169,8 +169,10 @@ private: BasicProposalItem *itemFromFunction(Function *func) const { - const QString text = m_overview.prettyName(LookupContext::fullyQualifiedName(func)); - const CPPEditorWidget::Link link = CPPEditorWidget::linkToSymbol(func); + const CPPEditorWidget::Link link = CPPEditorWidget::linkToSymbol(maybeDefinitionFor(func)); + QString text = m_overview.prettyName(LookupContext::fullyQualifiedName(func)); + if (func->isPureVirtual()) + text += QLatin1String(" = 0"); BasicProposalItem *item = new VirtualFunctionProposalItem(link, m_params.openInNextSplit); item->setText(text); @@ -182,7 +184,7 @@ private: VirtualFunctionAssistProvider::Parameters m_params; Overview m_overview; Icons m_icons; - CppTools::SymbolFinder m_finder; + mutable CppTools::SymbolFinder m_finder; }; VirtualFunctionAssistProvider::VirtualFunctionAssistProvider() diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp index c9e763cb3aa784d13818f2c1c76e315d27ecf554..7bbc5af2576abc70cb4b7c80191e747fdff9641a 100644 --- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp +++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp @@ -1040,7 +1040,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data() "int f(A *o) { o->$@virt(); }\n" "}\n") << (OverrideItemList() - << OverrideItem(QLatin1String("A::virt"), 2) + << OverrideItem(QLatin1String("A::virt = 0"), 2) << OverrideItem(QLatin1String("B::virt"), 5) << OverrideItem(QLatin1String("C::virt"), 8) << OverrideItem(QLatin1String("CD1::virt"), 11) @@ -1110,7 +1110,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data() "\n" "int f(C *o) { o->$@virt(); }\n") << (OverrideItemList() - << OverrideItem(QLatin1String("C::virt"), 2) + << OverrideItem(QLatin1String("C::virt = 0"), 2) << OverrideItem(QLatin1String("A::virt"), 8) << OverrideItem(QLatin1String("B::virt"), 5)); @@ -1194,7 +1194,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_data() "\n" "void client(A &o) { o.$@virt(); }\n") << (OverrideItemList() - << OverrideItem(QLatin1String("A::virt"), 2)); + << OverrideItem(QLatin1String("A::virt = 0"), 2)); /// Check: Do not trigger on a.virt() if a is of type A. QTest::newRow("notOnDotMemberAccessOfNonReferenceType") << _( @@ -1312,7 +1312,7 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_virtualFunctionCall_multipleD ; const OverrideItemList finalResults = OverrideItemList() - << OverrideItem(QLatin1String("A::virt"), 1) + << OverrideItem(QLatin1String("A::virt = 0"), 1) << OverrideItem(QLatin1String("B::virt"), 2); F2TestCase(F2TestCase::FollowSymbolUnderCursorAction, testFiles, finalResults);