diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp index 3b844749e2d7d3d5b52983a7e1e99a6bb415dd15..7646865cb8d4029ceefd61c02d3df104aae15694 100644 --- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp @@ -122,14 +122,11 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb { m_rewriterView->positionStorage()->setNodeOffset(modelNode, domObject.position()); - if (modelNode.type() != domObject.objectType() - || modelNode.majorVersion() != domObject.objectTypeMajorVersion() - || modelNode.minorVersion() != domObject.objectTypeMinorVersion()) { - differenceHandler.typeDiffers(modelNode, domObject); - } - { - const QString domObjectId = domObject.objectId(); + QString domObjectId = domObject.objectId(); + const QmlDomProperty domIdProperty = domObject.property("id"); + if (domObjectId.isEmpty() && domIdProperty.value().isLiteral()) + domObjectId = domIdProperty.value().toLiteral().literal(); if (domObjectId.isEmpty()) { if (!modelNode.id().isEmpty()) @@ -140,6 +137,12 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb } } + if (modelNode.type() != domObject.objectType() + || modelNode.majorVersion() != domObject.objectTypeMajorVersion() + || modelNode.minorVersion() != domObject.objectTypeMinorVersion()) { + differenceHandler.typeDiffers(modelNode, domObject); + } + QSet<QString> modelPropertyNames = QSet<QString>::fromList(modelNode.propertyNames()); foreach (const QmlDomProperty &domProperty, domObject.properties()) { @@ -149,15 +152,8 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb continue; if (domPropertyName == QLatin1String("id")) { - const QmlDomValue domValue = domProperty.value(); - if (domValue.isLiteral()) { - const QString domId = domValue.toLiteral().literal(); - - if (modelNode.id() != domId) - differenceHandler.idsDiffer(modelNode, domId); - } else { - qWarning() << "id property found which is not a literal"; - } + // already done before + continue; } else if (domPropertyName.isEmpty()) { qWarning() << "QML DOM returned an empty property name"; continue;