diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index ec1f6aa8eb911c2e3b88b339eb38886bb99543bd..2490c8d27fbd1ee31b15265c5608c9389986c88b 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -201,13 +201,14 @@ private slots: void test_quickfix_ExtractLiteralAsParameter_typeDeduction(); void test_quickfix_ExtractLiteralAsParameter_freeFunction_separateFiles(); void test_quickfix_ExtractLiteralAsParameter_memberFunction_separateFiles(); + void test_quickfix_ExtractLiteralAsParameter_notTriggeringForInvalidCode(); void test_quickfix_InsertVirtualMethods_data(); void test_quickfix_InsertVirtualMethods(); void test_quickfix_InsertVirtualMethods_implementationFile(); void test_quickfix_InsertVirtualMethods_BaseClassInNamespace(); - // tests for "Include Hiererchy" + // tests for "Include Hierarchy" void test_includehierarchy_data(); void test_includehierarchy(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 3e28a2025a8bed2cebe69481473eb791769c8c5d..2ef0c891227e5dba4613d52d88391f7b7739cccb 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -3614,3 +3614,21 @@ void CppEditorPlugin::test_quickfix_ExtractLiteralAsParameter_memberFunction_sep ExtractLiteralAsParameter factory; QuickFixTestCase(testFiles, &factory); } + +void CppEditorPlugin::test_quickfix_ExtractLiteralAsParameter_notTriggeringForInvalidCode() +{ + QList testFiles; + QByteArray original; + QByteArray expected; + + original = + "T(\"test\")\n" + "{\n" + " const int i = @14;\n" + "}\n"; + expected = original; + testFiles << QuickFixTestDocument::create("file.cpp", original, expected); + + ExtractLiteralAsParameter factory; + QuickFixTestCase(testFiles, &factory); +} diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index dfdcfbc18f2a0f4e014320077fcaf55946a28a4f..590b6ed7f19f224e685c9597bdfd140736a10c12 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -3884,13 +3884,15 @@ void ExtractLiteralAsParameter::match(const CppQuickFixInterface &interface, return; } - FunctionDeclaratorAST *functionDeclarator - = function->declarator->postfix_declarator_list->value->asFunctionDeclarator(); - if (functionDeclarator - && functionDeclarator->parameter_declaration_clause - && functionDeclarator->parameter_declaration_clause->dot_dot_dot_token) { - // Do not handle functions with ellipsis parameter. + PostfixDeclaratorListAST * const declaratorList = function->declarator->postfix_declarator_list; + if (!declaratorList) return; + if (FunctionDeclaratorAST *declarator = declaratorList->value->asFunctionDeclarator()) { + if (declarator->parameter_declaration_clause + && declarator->parameter_declaration_clause->dot_dot_dot_token) { + // Do not handle functions with ellipsis parameter. + return; + } } const int priority = path.size() - 1;