aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <[email protected]>2025-04-28 16:05:13 +0200
committerUlf Hermann <[email protected]>2025-05-06 20:25:46 +0000
commit2a1792e9f9697a4b4f15218bf03fbc74eb0cc75d (patch)
tree850bb4a7d3bb2c04ae1f93ca4970d4d1cdd352b7
parent981814fd8d571b12940e3b2a2441fc686fd5bdcb (diff)
qmltyperegistrar: Do not filter members by revision for qmltypes
We need information about all members in the qmltypes file, even if the revisions are nonsensical. This is because we need to get the method indices right when trying to call methods. We don't want to actually register the extra versions, but the code handling registration is different from the code producing qmltypes already. Amends commit c0f4442ae0d83e63fc90f1d5058081355f83b701 Pick-to: 6.9 Fixes: QTBUG-136248 Change-Id: Ibd41fcd3a3d7b9d79e1d1715746dd90702ade518 Reviewed-by: Sami Shalayel <[email protected]> Reviewed-by: Fabian Kosmale <[email protected]>
-rw-r--r--src/qmltyperegistrar/qqmltypescreator.cpp49
-rw-r--r--tests/auto/qml/qmltc_qprocess/tst_qmltc_qprocess.cpp5
-rw-r--r--tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp6
-rw-r--r--tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h2
4 files changed, 14 insertions, 48 deletions
diff --git a/src/qmltyperegistrar/qqmltypescreator.cpp b/src/qmltyperegistrar/qqmltypescreator.cpp
index fc76e18093..d22f5a1f66 100644
--- a/src/qmltyperegistrar/qqmltypescreator.cpp
+++ b/src/qmltyperegistrar/qqmltypescreator.cpp
@@ -290,47 +290,10 @@ void QmlTypesCreator::writeEnums(const Enum::Container &enums)
}
}
-template<typename Member>
-bool isAllowedInMajorVersion(const Member &memberObject, QTypeRevision maxMajorVersion)
-{
- const QTypeRevision memberRevision = memberObject.revision;
- return !memberRevision.hasMajorVersion()
- || memberRevision.majorVersion() <= maxMajorVersion.majorVersion();
-}
-
-template<typename Members, typename Postprocess>
-Members members(const Members &candidates, QTypeRevision maxMajorVersion, Postprocess &&process)
-{
- Members classDefMembers;
-
- for (const auto &member : candidates) {
- if (isAllowedInMajorVersion(member, maxMajorVersion))
- classDefMembers.push_back(process(member));
- }
-
- return classDefMembers;
-}
-
-template<typename Members>
-Members members(const Members &candidates, QTypeRevision maxMajorVersion)
-{
- return members(candidates, maxMajorVersion, [](const auto &member) { return member; });
-}
-
-template<typename Members>
-Members constructors(const Members &candidates, QTypeRevision maxMajorVersion)
-{
- return members(candidates, maxMajorVersion, [](const auto &member) {
- auto ctor = member;
- ctor.isConstructor = true;
- return ctor;
- });
-}
-
void QmlTypesCreator::writeRootMethods(const MetaType &classDef)
{
// Hide destroyed() signals
- Method::Container componentSignals = members(classDef.sigs(), m_version);
+ Method::Container componentSignals = classDef.sigs();
for (auto it = componentSignals.begin(); it != componentSignals.end();) {
if (it->name == "destroyed"_L1)
it = componentSignals.erase(it);
@@ -340,7 +303,7 @@ void QmlTypesCreator::writeRootMethods(const MetaType &classDef)
writeMethods(componentSignals, S_SIGNAL);
// Hide deleteLater() methods
- Method::Container componentMethods = members(classDef.methods(), m_version);
+ Method::Container componentMethods = classDef.methods();
for (auto it = componentMethods.begin(); it != componentMethods.end();) {
if (it->name == "deleteLater"_L1)
it = componentMethods.erase(it);
@@ -387,16 +350,16 @@ void QmlTypesCreator::writeComponent(const QmlTypesClassDescription &collector)
if (const MetaType &classDef = collector.resolvedClass; !classDef.isEmpty()) {
writeEnums(classDef.enums());
- writeProperties(members(classDef.properties(), m_version));
+ writeProperties(classDef.properties());
if (collector.isRootClass) {
writeRootMethods(classDef);
} else {
- writeMethods(members(classDef.sigs(), m_version), S_SIGNAL);
- writeMethods(members(classDef.methods(), m_version), S_METHOD);
+ writeMethods(classDef.sigs(), S_SIGNAL);
+ writeMethods(classDef.methods(), S_METHOD);
}
- writeMethods(constructors(classDef.constructors(), m_version), S_METHOD);
+ writeMethods(classDef.constructors(), S_METHOD);
}
m_qml.writeEndObject();
}
diff --git a/tests/auto/qml/qmltc_qprocess/tst_qmltc_qprocess.cpp b/tests/auto/qml/qmltc_qprocess/tst_qmltc_qprocess.cpp
index becc8c602f..d0677dd8a1 100644
--- a/tests/auto/qml/qmltc_qprocess/tst_qmltc_qprocess.cpp
+++ b/tests/auto/qml/qmltc_qprocess/tst_qmltc_qprocess.cpp
@@ -206,8 +206,11 @@ void tst_qmltc_qprocess::warningsAsErrors()
void tst_qmltc_qprocess::invalidAliasRevision()
{
+ // This isn't actually invalid. Revisions are only relevant for unqualified lookup
+ // but alias expressions are always qualified.
const auto errors = runQmltc(u"invalidAliasRevision.qml"_s, false);
- QVERIFY(errors.contains(u"Cannot resolve alias \"unexistingProperty\" [unresolved-alias]"_s));
+ QVERIFY2(!errors.contains(u"Cannot resolve alias \"unexistingProperty\" [unresolved-alias]"_s),
+ qPrintable(errors));
}
void tst_qmltc_qprocess::topLevelComponent()
diff --git a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
index f44f14e45a..0bb2c2bd80 100644
--- a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
+++ b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.cpp
@@ -120,11 +120,11 @@ void tst_qmltyperegistrar::isBindable()
QVERIFY(qmltypesData.contains(R"(Property { name: "someProperty"; type: "int"; bindable: "bindableSomeProperty"; index: 0 })"));
}
-void tst_qmltyperegistrar::restrictToImportVersion()
+void tst_qmltyperegistrar::doNotRestrictToImportVersion()
{
QVERIFY(qmltypesData.contains("ExcessiveVersion"));
- QVERIFY(!qmltypesData.contains("1536")); // Q_REVISION(6, 0)
- QVERIFY(!qmltypesData.contains("paletteChanged")); // Added in version 6.0
+ QVERIFY(qmltypesData.contains("1536")); // Q_REVISION(6, 0)
+ QVERIFY(qmltypesData.contains("paletteChanged")); // Added in version 6.0
}
void tst_qmltyperegistrar::pastMajorVersions()
diff --git a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
index 1d3c30a79d..008af807f0 100644
--- a/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
+++ b/tests/auto/qml/qmltyperegistrar/tst_qmltyperegistrar.h
@@ -932,7 +932,7 @@ private slots:
void superAndForeignTypes();
void accessSemantics();
void isBindable();
- void restrictToImportVersion();
+ void doNotRestrictToImportVersion();
void pastMajorVersions();
void implementsInterfaces();
void namespacedElement();