summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2014-08-18 10:26:39 +0200
committerEike Ziller <eike.ziller@digia.com>2014-08-18 14:16:43 +0200
commita01f6cadf492f6fba0e1f7024faeed56412c3d70 (patch)
tree6b6568ab482078b2b725ca51e372bd55805f67a8 /src
parentbe3dbd2699c8daed8ddf61f8cf08f68a481717d2 (diff)
downloadqt-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.h3
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp18
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp14
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;