Skip to content
Snippets Groups Projects
Commit d63199ca authored by Thomas Hartmann's avatar Thomas Hartmann Committed by Christian Kamm
Browse files

QmlJS: Resolve property types within package.

Reviewed-by: Christian Kamm
parent 806c8a56
No related branches found
No related tags found
No related merge requests found
......@@ -858,8 +858,12 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
// ### Verify type resolving.
QmlObjectValue *objectValue = engine()->cppQmlTypes().typeForImport(typeName);
if (objectValue)
if (objectValue) {
QString packageClassName = objectValue->nameInPackage(packageName());
if (!packageClassName.isEmpty())
objectValue = engine()->cppQmlTypes().typeForImport(packageName() + '.' + packageClassName);
return objectValue;
}
const Value *value = engine()->undefinedValue();
if (typeName == QLatin1String("QByteArray")
......@@ -910,6 +914,14 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const
QString QmlObjectValue::packageName() const
{ return _packageName; }
QString QmlObjectValue::nameInPackage(const QString &packageName) const
{
foreach (const FakeMetaObject::Export &exp, _metaObject->exports())
if (exp.package == packageName)
return exp.type;
return QString();
}
QmlJS::ComponentVersion QmlObjectValue::version() const
{ return _componentVersion; }
......@@ -2190,7 +2202,8 @@ QList<QmlObjectValue *> CppQmlTypes::typesForImport(const QString &packageName,
return objectValuesByName.values();
}
QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName) const
QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName,
QmlJS::ComponentVersion version) const
{
QString name = qualifiedName;
QString packageName;
......@@ -2205,6 +2218,8 @@ QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName) const
const QString typeName = qmlObjectValue->className();
if (typeName != name)
continue;
if (version.isValid() && version < qmlObjectValue->version())
continue;
if (previousCandidate) {
// check if our new candidate is newer than the one we found previously
......
......@@ -420,6 +420,7 @@ public:
const Value *propertyValue(const FakeMetaProperty &prop) const;
QString packageName() const;
QString nameInPackage(const QString &packageName) const;
ComponentVersion version() const;
QString defaultPropertyName() const;
QString propertyType(const QString &propertyName) const;
......@@ -563,7 +564,8 @@ public:
void load(Interpreter::Engine *interpreter, const QList<const FakeMetaObject *> &objects);
QList<Interpreter::QmlObjectValue *> typesForImport(const QString &prefix, ComponentVersion version) const;
Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName) const;
Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName,
ComponentVersion version = ComponentVersion()) const;
bool hasPackage(const QString &package) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment