aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-06-21 15:10:57 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-06-22 12:07:06 +0200
commitfc88340c6cab7f4fcb0b063cbeb842625e76ceed (patch)
tree7146d9ff3a9ca00a96a9a48bd6a777b24176630d
parent5118e75bc76f6c90a7e788d68763082c76db8dcb (diff)
QmlJS: Setup QmlEnumValues even if enum is non-local.
Change-Id: Ib7a3621c14b6dfbdf36c75abac282c08f47e55ca Reviewed-on: http://codereview.qt.nokia.com/559 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
-rw-r--r--src/libs/languageutils/fakemetaobject.cpp3
-rw-r--r--src/libs/languageutils/fakemetaobject.h2
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp25
-rw-r--r--src/libs/qmljs/qmljsinterpreter.h9
4 files changed, 31 insertions, 8 deletions
diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp
index 41b153c2ed..08134840ee 100644
--- a/src/libs/languageutils/fakemetaobject.cpp
+++ b/src/libs/languageutils/fakemetaobject.cpp
@@ -41,6 +41,9 @@ FakeMetaEnum::FakeMetaEnum(const QString &name)
: m_name(name)
{}
+bool FakeMetaEnum::isValid() const
+{ return !m_name.isEmpty(); }
+
QString FakeMetaEnum::name() const
{ return m_name; }
diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h
index 1fca983607..f44a59abbd 100644
--- a/src/libs/languageutils/fakemetaobject.h
+++ b/src/libs/languageutils/fakemetaobject.h
@@ -53,6 +53,8 @@ public:
FakeMetaEnum();
explicit FakeMetaEnum(const QString &name);
+ bool isValid() const;
+
QString name() const;
void setName(const QString &name);
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 5d53ce415d..64599946d2 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -227,7 +227,7 @@ void QmlObjectValue::processMembers(MemberProcessor *processor) const
const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
{
- const QString typeName = prop.typeName();
+ QString typeName = prop.typeName();
// ### Verify type resolving.
QmlObjectValue *objectValue = engine()->cppQmlTypes().typeByCppName(typeName);
@@ -276,10 +276,16 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
}
// might be an enum
- int enumIndex = _metaObject->enumeratorIndex(prop.typeName());
- if (enumIndex != -1) {
- const FakeMetaEnum &metaEnum = _metaObject->enumerator(enumIndex);
- value = new QmlEnumValue(metaEnum, engine());
+ const QmlObjectValue *base = this;
+ const QStringList components = typeName.split(QLatin1String("::"));
+ if (components.size() == 2) {
+ base = engine()->cppQmlTypes().typeByCppName(components.first());
+ typeName = components.last();
+ }
+ if (base) {
+ const FakeMetaEnum &metaEnum = base->getEnum(typeName);
+ if (metaEnum.isValid())
+ value = new QmlEnumValue(metaEnum, engine());
}
return value;
@@ -344,6 +350,15 @@ bool QmlObjectValue::isEnum(const QString &typeName) const
return _metaObject->enumeratorIndex(typeName) != -1;
}
+FakeMetaEnum QmlObjectValue::getEnum(const QString &typeName) const
+{
+ const int index = _metaObject->enumeratorIndex(typeName);
+ if (index == -1)
+ return FakeMetaEnum();
+
+ return _metaObject->enumerator(index);
+}
+
bool QmlObjectValue::isWritable(const QString &propertyName) const
{
for (const QmlObjectValue *it = this; it; it = it->prototype()) {
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 286a9794fe..26a48b5f85 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -490,13 +490,16 @@ public:
bool isListProperty(const QString &name) const;
bool isWritable(const QString &propertyName) const;
bool isPointer(const QString &propertyName) const;
- bool isEnum(const QString &typeName) const;
bool hasLocalProperty(const QString &typeName) const;
bool hasProperty(const QString &typeName) const;
- bool enumContainsKey(const QString &enumName, const QString &enumKeyName) const;
- QStringList keysForEnum(const QString &enumName) const;
bool hasChildInPackage() const;
+ LanguageUtils::FakeMetaEnum getEnum(const QString &typeName) const;
+
+ // deprecated
+ bool isEnum(const QString &typeName) const;
+ QStringList keysForEnum(const QString &enumName) const;
+ bool enumContainsKey(const QString &enumName, const QString &enumKeyName) const;
protected:
const Value *findOrCreateSignature(int index, const LanguageUtils::FakeMetaMethod &method,
QString *methodName) const;