summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmldesigner/core/model/rewriteaction.cpp14
-rw-r--r--src/plugins/qmldesigner/core/model/texttomodelmerger.cpp17
-rw-r--r--src/plugins/qmldesigner/core/model/texttomodelmerger.h2
-rw-r--r--tests/auto/qml/qmldesigner/coretests/testcore.cpp1
4 files changed, 23 insertions, 11 deletions
diff --git a/src/plugins/qmldesigner/core/model/rewriteaction.cpp b/src/plugins/qmldesigner/core/model/rewriteaction.cpp
index d681a6d15f..6475137688 100644
--- a/src/plugins/qmldesigner/core/model/rewriteaction.cpp
+++ b/src/plugins/qmldesigner/core/model/rewriteaction.cpp
@@ -30,6 +30,7 @@
#include <QtCore/QDebug>
#include "nodeabstractproperty.h"
+#include "nodelistproperty.h"
#include "rewriteaction.h"
using namespace QmlDesigner;
@@ -93,6 +94,16 @@ bool AddPropertyRewriteAction::execute(QmlRefactoring &refactoring, ModelNodePos
<< m_valueText << ") **"
<< info();
}
+ } else if (m_property.isNodeListProperty() && m_property.toNodeListProperty().toModelNodeList().size() > 1) {
+ result = refactoring.addToArrayMemberList(nodeLocation, m_property.name(), m_valueText);
+
+ if (!result) {
+ qDebug() << "*** AddPropertyRewriteAction::execute failed in addToArrayMemberList("
+ << nodeLocation << ','
+ << m_property.name() << ','
+ << m_valueText << ") **"
+ << info();
+ }
} else {
result = refactoring.addProperty(nodeLocation, m_property.name(), m_valueText, m_propertyType);
@@ -100,7 +111,8 @@ bool AddPropertyRewriteAction::execute(QmlRefactoring &refactoring, ModelNodePos
qDebug() << "*** AddPropertyRewriteAction::execute failed in addProperty("
<< nodeLocation << ','
<< m_property.name() << ','
- << m_valueText << ", ScriptBinding) **"
+ << m_valueText << ","
+ << qPrintable(toString(m_propertyType)) << ") **"
<< info();
}
}
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
index efeb8794ba..c1d6e277b0 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
@@ -367,7 +367,12 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
const QString astPropertyName = flatten(array->qualifiedId);
if (isValidPropertyForNode(modelNode, astPropertyName)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName);
- syncArrayProperty(modelProperty, array, context, differenceHandler);
+ QList<UiObjectMember *> arrayMembers;
+ for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
+ if (UiObjectMember *member = iter->member)
+ arrayMembers.append(member);
+
+ syncArrayProperty(modelProperty, arrayMembers, context, differenceHandler);
modelPropertyNames.remove(astPropertyName);
} else {
qWarning() << "Skipping invalid array property" << astPropertyName
@@ -383,8 +388,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
if (isValidPropertyForNode(modelNode, astPropertyName)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName);
if (modelProperty.metaInfo().isListProperty()) {
- NodeListProperty listProperty = modelProperty.toNodeListProperty();
- syncNodeListProperty(listProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
+ syncArrayProperty(modelProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
} else {
syncNodeProperty(modelProperty, binding, context, differenceHandler);
}
@@ -538,15 +542,10 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
}
void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty,
- UiArrayBinding *array,
+ const QList<UiObjectMember *> &arrayMembers,
ReadingContext *context,
DifferenceHandler &differenceHandler)
{
- QList<UiObjectMember *> arrayMembers;
- for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
- if (UiObjectMember *member = iter->member)
- arrayMembers.append(member);
-
if (modelProperty.isNodeListProperty()) {
NodeListProperty nodeListProperty = modelProperty.toNodeListProperty();
syncNodeListProperty(nodeListProperty, arrayMembers, context, differenceHandler);
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.h b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
index 8933e0866f..19a6e4738d 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
@@ -78,7 +78,7 @@ public:
const QString &javascript,
DifferenceHandler &differenceHandler);
void syncArrayProperty(AbstractProperty &modelProperty,
- QmlJS::AST::UiArrayBinding *array,
+ const QList<QmlJS::AST::UiObjectMember *> &arrayMembers,
ReadingContext *context,
DifferenceHandler &differenceHandler);
void syncVariantProperty(AbstractProperty &modelProperty,
diff --git a/tests/auto/qml/qmldesigner/coretests/testcore.cpp b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
index 2568e4ead9..25604f4b8c 100644
--- a/tests/auto/qml/qmldesigner/coretests/testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
@@ -2441,6 +2441,7 @@ void TestCore::testRewriterForArrayMagic()
ModelNode rootNode = view->rootModelNode();
QVERIFY(rootNode.isValid());
QCOMPARE(rootNode.type(), QString("Qt/Rectangle"));
+ QVERIFY(rootNode.property(QLatin1String("states")).isNodeListProperty());
QmlItemNode rootItem(rootNode);
QVERIFY(rootItem.isValid());