From 2de4a98ce0247efef280b6648c707e8575481c48 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Thu, 10 Jun 2010 11:18:14 +0200
Subject: [PATCH] Fixed id syncing when and id gets removed from the QML
 source.

Task-number: BAUHAUS-780
Reviewed-by: kkoehne
---
 .../qmldesigner/designercore/model/texttomodelmerger.cpp   | 7 ++++++-
 tests/auto/qml/qmldesigner/coretests/testcore.cpp          | 3 +--
 tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp  | 4 +++-
 tests/auto/qml/qmldesigner/coretests/testrewriterview.h    | 3 ++-
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index cf5dd941500..81a1dd18d62 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -636,6 +636,8 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
     context->enterScope(astNode);
 
     QSet<QString> modelPropertyNames = QSet<QString>::fromList(modelNode.propertyNames());
+    if (!modelNode.id().isEmpty())
+        modelPropertyNames.insert(QLatin1String("id"));
     QList<UiObjectMember *> defaultPropertyItems;
 
     for (UiObjectMemberList *iter = astInitializer->members; iter; iter = iter->next) {
@@ -744,7 +746,10 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
         AbstractProperty modelProperty = modelNode.property(modelPropertyName);
 
         // property deleted.
-        differenceHandler.propertyAbsentFromQml(modelProperty);
+        if (modelPropertyName == QLatin1String("id"))
+            differenceHandler.idsDiffer(modelNode, QString());
+        else
+            differenceHandler.propertyAbsentFromQml(modelProperty);
     }
 
     context->leaveScope();
diff --git a/tests/auto/qml/qmldesigner/coretests/testcore.cpp b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
index 1b40436aff6..b3a36212ce4 100644
--- a/tests/auto/qml/qmldesigner/coretests/testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
@@ -5441,7 +5441,7 @@ void TestCore::testRewriterRemoveId()
     QVERIFY(view.data());
     model->attachView(view.data());
 
-    QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView());
+    QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView(0, TestRewriterView::Amend));
     testRewriterView->setTextModifier(&textModifier);
     model->attachView(testRewriterView.data());
 
@@ -5449,7 +5449,6 @@ void TestCore::testRewriterRemoveId()
     QVERIFY(rootModelNode.isValid());
     QCOMPARE(rootModelNode.id(), QString("rect"));
 
-    QSKIP("Fix me!!!! Task BAUHAUS-780", SkipAll);
     //
     // remove id in text
     //
diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp
index b12c164a6de..eb3cf27b80b 100644
--- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp
@@ -83,7 +83,9 @@ VariantProperty TestModelToTextMerger::findAddedVariantProperty(const VariantPro
     return VariantProperty();
 }
 
-TestRewriterView::TestRewriterView(QObject *parent) : RewriterView(RewriterView::Validate, parent)
+TestRewriterView::TestRewriterView(QObject *parent,
+                                   DifferenceHandling differenceHandling)
+    : RewriterView(differenceHandling, parent)
 {
 }
 
diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
index 0fa319f2199..c313fe5bed9 100644
--- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
+++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
@@ -53,7 +53,8 @@ class TestRewriterView : public RewriterView
 Q_OBJECT
 
 public:
-    TestRewriterView(QObject *parent = 0);
+    TestRewriterView(QObject *parent = 0,
+                     DifferenceHandling differenceHandling = RewriterView::Validate);
 
     Internal::TestModelToTextMerger *modelToTextMerger() const;
     Internal::TextToModelMerger *textToModelMerger() const;
-- 
GitLab