From e4114505eedb29237ab3944ee87cf4a975e33ed4 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
Date: Wed, 19 Sep 2012 10:20:57 +0200
Subject: [PATCH] QmlDesigner: fix regression uncovered by tests

Fixing a regression in the meta info system.

We follow now Qthe Declarative1StateOperation convention (note the 1).
Since this data is provided by Qt Creator it is independent from any Qt
version. (4.8/5.1)

Also the type comparison was broken in NodeMetaInfo for <cpp> types.
PackageName() does retrieve the package name of the cpp type which might
be different from the one used in qualfiedTypeName().

Change-Id: I5cdae37c2024cdc89824e68168c16e2050051d06
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
---
 .../designercore/metainfo/nodemetainfo.cpp       | 16 ++++++++++++----
 .../designercore/model/qmlchangeset.cpp          |  2 +-
 .../qml/qmldesigner/coretests/tst_testcore.cpp   |  1 +
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index acaf8c3f313..8a3e1450583 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -339,7 +339,7 @@ public:
     Model *model() const
     { return m_model; }
 
-    QString packageName() const;
+    QString cppPackageName() const;
 
     QString componentSource() const;
     QString componentFileName() const;
@@ -674,6 +674,14 @@ QString NodeMetaInfoPrivate::propertyEnumScope(const QString &propertyName) cons
     return QString();
 }
 
+static QString getUnqualifiedName(const QString &name)
+{
+    const QStringList nameComponents = name.split('.');
+    if (nameComponents.size() < 2)
+        return QString();
+    return nameComponents.last();
+}
+
 bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
 {
     if (otherType == qualfiedTypeName())
@@ -689,8 +697,8 @@ bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
         package = split.first();
         typeName = split.at(1);
     }
-    if (packageName() == package)
-        return QString(package + '.' + typeName) == qualfiedTypeName();
+    if (cppPackageName() == package)
+        return QString(package + '.' + typeName) == cppPackageName() + '.' + getUnqualifiedName(qualfiedTypeName());
 
     const CppComponentValue *qmlObjectValue = getCppComponentValue();
     if (!qmlObjectValue)
@@ -753,7 +761,7 @@ QStringList NodeMetaInfoPrivate::keysForEnum(const QString &enumName) const
     return qmlObjectValue->getEnum(enumName).keys();
 }
 
-QString NodeMetaInfoPrivate::packageName() const
+QString NodeMetaInfoPrivate::cppPackageName() const
 {
     if (!isComponent()) {
         if (const CppComponentValue *qmlObject = getCppComponentValue())
diff --git a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
index 7c9bfa52f98..c4a814fa828 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
@@ -57,7 +57,7 @@ bool QmlPropertyChanges::isValid() const
 
 bool QmlModelStateOperation::isValid() const
 {
-    return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarativeStateOperation", -1, -1);
+    return QmlModelNodeFacade::isValid() &&  modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarative1StateOperation", -1, -1);
 }
 
 void QmlPropertyChanges::removeProperty(const QString &name)
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index 64a9f4edbdd..ecc8b394ab2 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -1259,6 +1259,7 @@ void tst_TestCore::testBasicStates()
     QCOMPARE(state1.propertyChanges().count(), 2);
     QCOMPARE(state2.propertyChanges().count(), 2);
 
+    QVERIFY(state1.propertyChanges().first().modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarative1StateOperation", -1, -1));
     QVERIFY(!state1.hasPropertyChanges(rootModelNode));
 
     QVERIFY(state1.propertyChanges(rect1).isValid());
-- 
GitLab