From b71d3eb145d2d6efa160ae07383e1ec04ea47b2e Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Wed, 31 Mar 2010 14:18:57 +0200
Subject: [PATCH] Added defaultProperty attribute reading and storing.

---
 src/libs/qmljs/qmljsinterpreter.cpp | 16 +++++++++++++++-
 src/libs/qmljs/qmljsinterpreter.h   |  1 +
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 47c69c3a922..dea04577a90 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -199,6 +199,7 @@ class FakeMetaObject {
     QList<FakeMetaEnum> m_enums;
     QList<FakeMetaProperty> m_props;
     QList<FakeMetaMethod> m_methods;
+    QString m_defaultPropertyName;
 
 public:
     FakeMetaObject(const QString &name, const QString &package, int majorVersion, int minorVersion)
@@ -250,6 +251,12 @@ public:
     { return m_major; }
     int minorVersion() const
     { return m_minor; }
+
+    QString defaultPropertyName() const
+    { return m_defaultPropertyName; }
+
+    void setDefaultPropertyName(const QString defaultPropertyName)
+    { m_defaultPropertyName = defaultPropertyName; }
 };
 
 } // end of Interpreter namespace
@@ -364,7 +371,7 @@ private:
         const QLatin1String tag("type");
         Q_ASSERT(_xml.isStartElement() && _xml.name() == tag);
 
-        QString name;
+        QString name, defaultPropertyName;
         int major = -1, minor = -1;
         QString extends;
         foreach (const QXmlStreamAttribute &attr, _xml.attributes()) {
@@ -398,6 +405,8 @@ private:
                         return;
                     }
                 }
+            } else if (attr.name() == QLatin1String("defaultProperty")) {
+                defaultPropertyName = attr.value().toString();
             } else if (attr.name() == QLatin1String("extends")) {
                 if (! attr.value().isEmpty())
                     extends = attr.value().toString();
@@ -412,6 +421,8 @@ private:
                                                         major, minor);
         if (! extends.isEmpty())
             metaObject->setSuperclassName(extends);
+        if (! defaultPropertyName.isEmpty())
+            metaObject->setDefaultPropertyName(defaultPropertyName);
 
         while (_xml.readNextStartElement()) {
             if (_xml.name() == QLatin1String("property"))
@@ -830,6 +841,9 @@ int QmlObjectValue::majorVersion() const
 int QmlObjectValue::minorVersion() const
 { return _metaObject->minorVersion(); }
 
+QString QmlObjectValue::defaultPropertyName() const
+{ return _metaObject->defaultPropertyName(); }
+
 bool QmlObjectValue::isDerivedFrom(const FakeMetaObject *base) const
 {
     for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) {
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 83bcce2be8e..76b779a7735 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -417,6 +417,7 @@ public:
     QString packageName() const;
     int majorVersion() const;
     int minorVersion() const;
+    QString defaultPropertyName() const;
 
 protected:
     const Value *findOrCreateSignature(int index, const FakeMetaMethod &method, QString *methodName) const;
-- 
GitLab