diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2019-10-18 10:03:18 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2019-10-21 12:47:54 +0200 |
commit | 16cbcc606d431456ef5ab6783705a37d27776207 (patch) | |
tree | 6e4727307e75beadc3c9a532c29ffcd93f9a7a00 /src/qml/qml/qqmlpropertycachecreator.cpp | |
parent | c23f85e159245f4f01f095bbb50dd01df4df2b62 (diff) |
Add support for primitive self-references in composite types
This has been long missing and will also help with the implementation of
inline components and the referenced bugs.
Done-with: Fabian Kosmale <fabian.kosmale@qt.io>
Task-number: QTBUG-41087
Task-number: QTBUG-35910
Change-Id: Ia42a8f9808ece543f8ce2314b3352507fab22c62
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertycachecreator.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycachecreator.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlpropertycachecreator.cpp b/src/qml/qml/qqmlpropertycachecreator.cpp index 034ebfc743..36581bda4e 100644 --- a/src/qml/qml/qqmlpropertycachecreator.cpp +++ b/src/qml/qml/qqmlpropertycachecreator.cpp @@ -74,6 +74,22 @@ int QQmlPropertyCacheCreatorBase::metaTypeForPropertyType(QV4::CompiledData::Bui return QMetaType::UnknownType; } +QByteArray QQmlPropertyCacheCreatorBase::createClassNameTypeByUrl(const QUrl &url) +{ + const QString path = url.path(); + int lastSlash = path.lastIndexOf(QLatin1Char('/')); + // Not a reusable type if we don't have an absolute Url + if (lastSlash <= -1) + return QByteArray(); + // ### this might not be correct for .ui.qml files + const QStringRef nameBase = path.midRef(lastSlash + 1, path.length() - lastSlash - 5); + // Not a reusable type if it doesn't start with a upper case letter. + if (nameBase.isEmpty() || !nameBase.at(0).isUpper()) + return QByteArray(); + return nameBase.toUtf8() + "_QMLTYPE_" + + QByteArray::number(classIndexCounter.fetchAndAddRelaxed(1)); +} + QQmlBindingInstantiationContext::QQmlBindingInstantiationContext(int referencingObjectIndex, const QV4::CompiledData::Binding *instantiatingBinding, const QString &instantiatingPropertyName, QQmlPropertyCache *referencingObjectPropertyCache) : referencingObjectIndex(referencingObjectIndex) |