From d25c5f35ca127c5b1aca0e296bccfbcc4c9247e9 Mon Sep 17 00:00:00 2001 From: Lorenz Haas <lykurg@gmail.com> Date: Tue, 14 May 2013 11:10:15 +0200 Subject: [PATCH] CppEditor: InsertDefFromDecl: Hide when definition already exists "Add Definition Inside/Outside Class" was wrongly shown when there was already an definition outside the class. Change-Id: I6409080c6a1a3abdd4511f7db14ecb4f63458411 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> --- src/plugins/cppeditor/cppeditorplugin.h | 1 + src/plugins/cppeditor/cppquickfix_test.cpp | 15 +++++++++++++++ src/plugins/cppeditor/cppquickfixes.cpp | 7 +++++++ 3 files changed, 23 insertions(+) diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index d8714bb99c9..40c8b1ac48a 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -157,6 +157,7 @@ private slots: void test_quickfix_InsertDefFromDecl_headerSource_namespace2(); void test_quickfix_InsertDefFromDecl_freeFunction(); void test_quickfix_InsertDefFromDecl_insideClass(); + void test_quickfix_InsertDefFromDecl_notTriggeringWhenDefinitionExists(); void test_quickfix_InsertDeclFromDef(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 35423c5b548..25059217b59 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -893,6 +893,21 @@ void CppEditorPlugin::test_quickfix_InsertDefFromDecl_insideClass() data.run(&factory, 1); } +/// Check not triggering when definition exists +void CppEditorPlugin::test_quickfix_InsertDefFromDecl_notTriggeringWhenDefinitionExists() +{ + const QByteArray original = + "class Foo {\n" + " void b@ar();\n" + "};\n" + "void Foo::bar() {}\n"; + const QByteArray expected = original + "\n"; + + InsertDefFromDecl factory; + TestCase data(original, expected); + data.run(&factory, 1); +} + // Function for one of InsertDeclDef section cases void insertToSectionDeclFromDef(const QByteArray §ion, int sectionIndex) { diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 0b42f5bfbb8..5d67df6037b 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -2621,6 +2621,13 @@ void InsertDefFromDecl::match(const CppQuickFixInterface &interface, QuickFixOpe const QString cppFileName = correspondingHeaderOrSource( interface->fileName(), &isHeaderFile); + // Check if there is already a definition + CppTools::SymbolFinder symbolFinder; + if (symbolFinder.findMatchingDefinition(decl, interface->snapshot(), + true)) { + return; + } + // Insert Position: Implementation File if (isHeaderFile && !cppFileName.isEmpty()) { CppRefactoringChanges refactoring(interface->snapshot()); -- GitLab