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()) {