aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2025-04-30 09:48:08 +0200
committerUlf Hermann <[email protected]>2025-04-30 14:34:17 +0200
commit06cd8c98435c5c778882eb6f1f32e5740bda59e6 (patch)
tree13cd2d3fc7912866d1d3597cebb084dc6aff1c6a
parent5f3b613b2ea848dfc66c00a6d91d507703a916b3 (diff)
QtQml: Do not check revisions when resolving aliases
Revisions are for unqualified lookup. Aliases are always qualified. [ChangeLog][QtQml] You can now create aliases to revisioned properties that would be unavailable when accessed without qualification. Aliases are always qualified after all. Pick-to: 6.9 Task-number: QTBUG-136248 Change-Id: I2aae7bb104850def8f220bfab1a2fa056efe78e0 Reviewed-by: Fabian Kosmale <[email protected]>
-rw-r--r--src/qml/qml/qqmltypecompiler.cpp3
-rw-r--r--tests/auto/qml/qqmllanguage/data/aliasToLargeRevision.qml9
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.cpp3
-rw-r--r--tests/auto/qml/qqmllanguage/testtypes.h26
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp17
5 files changed, 57 insertions, 1 deletions
diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp
index 0938d14038..842b63b12d 100644
--- a/src/qml/qml/qqmltypecompiler.cpp
+++ b/src/qml/qml/qqmltypecompiler.cpp
@@ -889,7 +889,8 @@ QQmlComponentAndAliasResolver<QQmlTypeCompiler>::resolveAliasesInObject(
QQmlPropertyResolver resolver(targetCache);
- const QQmlPropertyData *targetProperty = resolver.property(property.toString());
+ const QQmlPropertyData *targetProperty = resolver.property(
+ property.toString(), nullptr, QQmlPropertyResolver::IgnoreRevision);
// If it's an alias that we haven't resolved yet, try again later.
if (!targetProperty) {
diff --git a/tests/auto/qml/qqmllanguage/data/aliasToLargeRevision.qml b/tests/auto/qml/qqmllanguage/data/aliasToLargeRevision.qml
new file mode 100644
index 0000000000..fb74095384
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/aliasToLargeRevision.qml
@@ -0,0 +1,9 @@
+import Test 1.0
+
+LargeRevision {
+ id: self
+ property alias aa: self.a
+ property alias bb: self.b
+ property alias cc: self.c
+ property alias dd: self.d
+}
diff --git a/tests/auto/qml/qqmllanguage/testtypes.cpp b/tests/auto/qml/qqmllanguage/testtypes.cpp
index 19477d14a3..bdeee87ba7 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.cpp
+++ b/tests/auto/qml/qqmllanguage/testtypes.cpp
@@ -199,6 +199,9 @@ void registerTypes()
qmlRegisterSingletonType<ReadCounter>("Test", 1, 0, "ReadCounterSingleton", readCounterSingleton);
qmlRegisterTypesAndRevisions<BindablePoint>("Test", 1);
+
+ qmlRegisterTypesAndRevisions<LargeRevisionBase>("Test", 1);
+ qmlRegisterTypesAndRevisions<LargeRevision>("Test", 1);
}
QVariant myCustomVariantTypeConverter(const QString &data)
diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h
index ea7dcd539c..52c8d94c4d 100644
--- a/tests/auto/qml/qqmllanguage/testtypes.h
+++ b/tests/auto/qml/qqmllanguage/testtypes.h
@@ -3276,4 +3276,30 @@ private:
QProperty<QPointF> m_point;
};
+class LargeRevisionBase : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+ Q_PROPERTY(int c MEMBER m_c CONSTANT)
+ Q_PROPERTY(int d MEMBER m_d CONSTANT)
+public:
+ int m_c = 11;
+ int m_d = 12;
+};
+
+class LargeRevision : public LargeRevisionBase
+{
+ Q_OBJECT
+ QML_ELEMENT
+ Q_PROPERTY(int a MEMBER m_a CONSTANT REVISION(1, 12))
+ Q_PROPERTY(int b MEMBER m_b CONSTANT REVISION(12, 12))
+ Q_PROPERTY(int c MEMBER m_c CONSTANT REVISION(1, 12))
+ Q_PROPERTY(int d MEMBER m_d CONSTANT REVISION(12, 12))
+public:
+ int m_a = 13;
+ int m_b = 14;
+ int m_c = 15;
+ int m_d = 16;
+};
+
#endif // TESTTYPES_H
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index f460dc3cad..d95f25df98 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -517,6 +517,8 @@ private slots:
void argumentsUsageInBindings_data();
void argumentsUsageInBindings();
+ void aliasToLargeRevision();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -9767,6 +9769,21 @@ void tst_qqmllanguage::argumentsUsageInBindings() {
QCOMPARE(object->property("result").toString(), object->property("expected").toString());
}
+void tst_qqmllanguage::aliasToLargeRevision()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("aliasToLargeRevision.qml"));
+
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
+ QScopedPointer<QObject> o(c.create());
+ QVERIFY(!o.isNull());
+
+ QCOMPARE(o->property("aa"), 13);
+ QCOMPARE(o->property("bb"), 14);
+ QCOMPARE(o->property("cc"), 15);
+ QCOMPARE(o->property("dd"), 16);
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"