aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2022-03-03 12:05:18 +0100
committerUlf Hermann <ulf.hermann@qt.io>2022-03-09 10:59:33 +0100
commitfba82d9244bcd583f1b669f57808e54e2dac2314 (patch)
tree8f0b0bd4b8141e133c0b4f6b45e17d70a057bf75 /src
parent1435c29624d0f47fab9c561f3b26dfacb8386ca9 (diff)
QML: Unify treatment of invalid revisions on registration
Revisions before QML_ADDED_IN_VERSION and revisions after QML_REMOVED_IN_VERSION should both result in anonymous types. This way, you can then derive from the type in question and expose the derived type in a different set of versions. Change-Id: Ia59258047fc242c809c27525bb75fd2797fe5aab Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 464abaec05e0aa0ab699243412c50a5d5ac30742) Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqml.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/qml/qml/qqml.cpp b/src/qml/qml/qqml.cpp
index ec7f50cf04..598b780afb 100644
--- a/src/qml/qml/qqml.cpp
+++ b/src/qml/qml/qqml.cpp
@@ -518,21 +518,23 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data)
uniqueRevisions(&revisions, type.version, added);
for (QTypeRevision revision : revisions) {
- if (revision < added)
- continue;
if (revision.hasMajorVersion() && revision.majorVersion() > type.version.majorVersion())
break;
- // When removed, we still add revisions, but anonymous ones
- if (removed.isValid() && !(revision < removed)) {
+
+ assignVersions(&revisionRegistration, revision, type.version);
+
+ // When removed or before added, we still add revisions, but anonymous ones
+ if (revisionRegistration.version < added
+ || (removed.isValid() && !(revisionRegistration.version < removed))) {
revisionRegistration.elementName = nullptr;
revisionRegistration.create = nullptr;
+ revisionRegistration.userdata = nullptr;
} else {
revisionRegistration.elementName = elementName;
revisionRegistration.create = creatable ? type.create : nullptr;
revisionRegistration.userdata = type.userdata;
}
- assignVersions(&revisionRegistration, revision, type.version);
revisionRegistration.customParser = type.customParserFactory();
const int id = qmlregister(TypeRegistration, &revisionRegistration);
if (type.qmlTypeIds)
@@ -570,13 +572,14 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data)
uniqueRevisions(&revisions, type.version, added);
for (QTypeRevision revision : qAsConst(revisions)) {
- if (revision < added)
- continue;
if (revision.hasMajorVersion() && revision.majorVersion() > type.version.majorVersion())
break;
- // When removed, we still add revisions, but anonymous ones
- if (removed.isValid() && !(revision < removed)) {
+ assignVersions(&revisionRegistration, revision, type.version);
+
+ // When removed or before added, we still add revisions, but anonymous ones
+ if (revisionRegistration.version < added
+ || (removed.isValid() && !(revisionRegistration.version < removed))) {
revisionRegistration.typeName = nullptr;
revisionRegistration.qObjectApi = nullptr;
} else {
@@ -584,7 +587,6 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data)
revisionRegistration.qObjectApi = type.qObjectApi;
}
- assignVersions(&revisionRegistration, revision, type.version);
const int id = qmlregister(SingletonRegistration, &revisionRegistration);
if (type.qmlTypeIds)
type.qmlTypeIds->append(id);