diff options
author | David Schulz <david.schulz@qt.io> | 2019-12-04 09:53:26 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-01-08 09:21:25 +0000 |
commit | 1ab9dc946410e96e0e211347e9d9127740ab18dd (patch) | |
tree | 779341b2d2817194c978ab78d544e2635e054494 /src/plugins/cppeditor/cppquickfix_test.cpp | |
parent | 15734ac5eb5b7b55916aca7b83a85ed8b6c793c1 (diff) |
CppEditor: generate valid code via "Convert to Pointer/Stack Variable"
Adding a "= new <TypeName>" after converting a stack variable without
assignment or initializer to pointer.
Also remove the assignment when converting from pointer to stack
variable as this works better with explicit constructors.
Fixes: QTCREATORBUG-23181
Change-Id: I377ec32a1b66cf4b96db14cfcb4b71fb96c80c98
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/cppeditor/cppquickfix_test.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppquickfix_test.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 63f1290b6a..e75464d2b5 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -1578,7 +1578,7 @@ void CppEditorPlugin::test_quickfix_data() " f2(&str);\n" "}\n") << _("void foo() {\n" - " QString *str;\n" + " QString *str = new QString;\n" " if (!str->isEmpty())\n" " str->clear();\n" " f1(*str);\n" @@ -1612,7 +1612,7 @@ void CppEditorPlugin::test_quickfix_data() " str->clear();\n" "}\n") << _("void foo() {\n" - " QString str = QLatin1String(\"schnurz\");\n" + " QString str(QLatin1String(\"schnurz\"));\n" " if (!str.isEmpty())\n" " str.clear();\n" "}\n"); @@ -1731,7 +1731,7 @@ void CppEditorPlugin::test_quickfix_data() " f1(str);\n" "}\n") << _("void foo() {\n" - " QString *str;\n" + " QString *str = new QString;\n" " str->clear();\n" " {\n" " QString str;\n" @@ -1808,6 +1808,45 @@ void CppEditorPlugin::test_quickfix_data() " BAR = *foo;\n" "}\n"); + QString testObjAndFunc = "struct Object\n" + "{\n" + " Object(%1){}\n" + "};\n" + "void func()\n" + "{\n" + " %2\n" + "}\n"; + + QTest::newRow("ConvertToStack1_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("int").arg("Object *@obj = new Object(0);").toUtf8()) + << _(testObjAndFunc.arg("int").arg("Object obj(0);").toUtf8()); + + QTest::newRow("ConvertToStack2_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("int").arg("Object *@obj = new Object{0};").toUtf8()) + << _(testObjAndFunc.arg("int").arg("Object obj{0};").toUtf8()); + + QTest::newRow("ConvertToPointer1_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("").arg("Object @obj;").toUtf8()) + << _(testObjAndFunc.arg("").arg("Object *obj = new Object;").toUtf8()); + + QTest::newRow("ConvertToPointer2_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("").arg("Object @obj();").toUtf8()) + << _(testObjAndFunc.arg("").arg("Object *obj = new Object();").toUtf8()); + + QTest::newRow("ConvertToPointer3_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("").arg("Object @obj{};").toUtf8()) + << _(testObjAndFunc.arg("").arg("Object *obj = new Object{};").toUtf8()); + + QTest::newRow("ConvertToPointer4_QTCREATORBUG23181") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _(testObjAndFunc.arg("int").arg("Object @obj(0);").toUtf8()) + << _(testObjAndFunc.arg("int").arg("Object *obj = new Object(0);").toUtf8()); + QTest::newRow("InsertQtPropertyMembers_noTriggerInvalidCode") << CppQuickFixFactoryPtr(new InsertQtPropertyMembers) << _("class C { @Q_PROPERTY(typeid foo READ foo) };\n") |