From d2faf880f35537d31d3bbfa19154a93a1dd6aba6 Mon Sep 17 00:00:00 2001 From: Lorenz Haas <lykurg@gmail.com> Date: Mon, 10 Jun 2013 17:27:09 +0200 Subject: [PATCH] CppEditor: Fix triggering AssignToLocalVariable Do not trigger for functions inside a function call. Task-number: QTCREATORBUG-9510 Change-Id: I908483fe80ff3ac0f737b21061375e206c1b1d1d Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> --- src/plugins/cppeditor/cppeditorplugin.h | 1 + src/plugins/cppeditor/cppquickfix_test.cpp | 16 ++++++++++++++++ src/plugins/cppeditor/cppquickfixes.cpp | 6 +++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index 64c19e31301..9f055fadcf0 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -199,6 +199,7 @@ private slots: void test_quickfix_AssignToLocalVariable_noVoidMemberFunction(); void test_quickfix_AssignToLocalVariable_noVoidStaticMemberFunction(); void test_quickfix_AssignToLocalVariable_noFunctionInExpression(); + void test_quickfix_AssignToLocalVariable_noFunctionInFunction(); void test_quickfix_AssignToLocalVariable_noReturnClass(); void test_quickfix_AssignToLocalVariable_noReturnFunc(); void test_quickfix_AssignToLocalVariable_noSignatureMatch(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 66aa48fd470..9cc4f67a9b3 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -2091,6 +2091,22 @@ void CppEditorPlugin::test_quickfix_AssignToLocalVariable_noFunctionInExpression data.run(&factory); } +/// Check: No trigger for functions in functions. (QTCREATORBUG-9510) +void CppEditorPlugin::test_quickfix_AssignToLocalVariable_noFunctionInFunction() +{ + const QByteArray original = + "int foo(int a, int b) {return a + b;}\n" + "int bar(int a) {return a;}\n" + "void baz() {\n" + " int a = foo(ba@r(), bar());\n" + "}\n"; + const QByteArray expected = original + "\n"; + + AssignToLocalVariable factory; + TestCase data(original, expected); + data.run(&factory); +} + /// Check: No trigger for functions in return statements (classes). void CppEditorPlugin::test_quickfix_AssignToLocalVariable_noReturnClass() { diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 095e596ad32..e817d70c5f3 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -4227,6 +4227,8 @@ void AssignToLocalVariable::match(const CppQuickFixInterface &interface, QuickFi return; if (path.at(i - 1)->asReturnStatement()) return; + if (path.at(i - 1)->asCall()) + return; } if (MemberAccessAST *member = path.at(i + 1)->asMemberAccess()) { // member @@ -4259,7 +4261,9 @@ void AssignToLocalVariable::match(const CppQuickFixInterface &interface, QuickFi return; if (path.at(idx)->asMemInitializer()) return; - if (path.at(i-1)->asReturnStatement()) + if (path.at(i - 1)->asReturnStatement()) + return; + if (path.at(i - 1)->asCall()) return; } if (NamedTypeSpecifierAST *ts = path.at(i + 2)->asNamedTypeSpecifier()) { -- GitLab