From a01f6cadf492f6fba0e1f7024faeed56412c3d70 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 18 Aug 2014 10:26:39 +0200 Subject: [PATCH] CppEditor: Return on invalid code in ExtractLiteralAsParameter::match No declarator was provided but we assumed one. Task-number: QTCREATORBUG-12853 Change-Id: I5faf96b63f39aff43c0165f7277345737e53f191 Reviewed-by: Erik Verbruggen Reviewed-by: Eike Ziller --- src/plugins/cppeditor/cppeditorplugin.h | 3 ++- src/plugins/cppeditor/cppquickfix_test.cpp | 18 ++++++++++++++++++ src/plugins/cppeditor/cppquickfixes.cpp | 14 ++++++++------ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index ec1f6aa8eb9..2490c8d27fb 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 3e28a2025a8..2ef0c891227 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 dfdcfbc18f2..590b6ed7f19 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;