forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user