diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2014-08-18 10:26:39 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-08-18 14:16:43 +0200 |
commit | a01f6cadf492f6fba0e1f7024faeed56412c3d70 (patch) | |
tree | 6b6568ab482078b2b725ca51e372bd55805f67a8 /src | |
parent | be3dbd2699c8daed8ddf61f8cf08f68a481717d2 (diff) | |
download | qt-creator-a01f6cadf492f6fba0e1f7024faeed56412c3d70.tar.gz |
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 <erik.verbruggen@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/cppeditor/cppeditorplugin.h | 3 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfix_test.cpp | 18 | ||||
-rw-r--r-- | 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 ec1f6aa8eb..2490c8d27f 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 3e28a2025a..2ef0c89122 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<QuickFixTestDocument::Ptr> 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 dfdcfbc18f..590b6ed7f1 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; |