aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltypeloader.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-06-22 18:10:23 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-06-29 15:51:16 +0200
commitd8513d338d8537506984a13bf1f4ef6507678286 (patch)
tree087b524a17c38a9bfa44849e3c8e45fdeba3423b /src/qml/qml/qqmltypeloader.cpp
parentbd1c28a82c2ff955e0d154fac2e2df8d5a110dd7 (diff)
Match specific module imports also for versionless QML imports
Previously, if you registered a module import for a specific version X of a module, and the user imported the module without specifying a version, the module import would not be carried out even if X was the version actually imported. Change-Id: I853ed6f275501cf4cbd4e5a360985e67b07f3773 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqmltypeloader.cpp')
-rw-r--r--src/qml/qml/qqmltypeloader.cpp42
1 files changed, 33 insertions, 9 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 8e90388258..6b4ce26c97 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -528,9 +528,16 @@ bool QQmlTypeLoader::Blob::updateQmldir(const QQmlRefPointer<QQmlQmldirData> &da
typeLoader()->setQmldirContent(qmldirIdentifier, data->content());
- if (!m_importCache.updateQmldirContent(typeLoader()->importDatabase(), import->uri, import->qualifier, qmldirIdentifier, qmldirUrl, errors))
+ const QTypeRevision version = m_importCache.updateQmldirContent(
+ typeLoader()->importDatabase(), import->uri, import->qualifier, qmldirIdentifier,
+ qmldirUrl, errors);
+ if (!version.isValid())
return false;
+ // Use more specific version for dependencies if possible
+ if (version.hasMajorVersion())
+ import->version = version;
+
if (!loadImportDependencies(import, qmldirIdentifier, errors))
return false;
@@ -584,11 +591,16 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo
&qmldirFilePath, &qmldirUrl);
if (qmldirResult == QQmlImports::QmldirFound) {
// This is a local library import
- if (!m_importCache.addLibraryImport(
+ const QTypeRevision actualVersion = m_importCache.addLibraryImport(
importDatabase, import->uri, import->qualifier,
- import->version, qmldirFilePath, qmldirUrl, flags, errors))
+ import->version, qmldirFilePath, qmldirUrl, flags, errors);
+ if (!actualVersion.isValid())
return false;
+ // Use more specific version for dependencies if possible
+ if (actualVersion.hasMajorVersion())
+ import->version = actualVersion;
+
if (!loadImportDependencies(import, qmldirFilePath, errors))
return false;
@@ -616,11 +628,11 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo
// Otherwise, there is no way to register any further types.
// Try with any module of that name.
- || QQmlMetaType::isAnyModule(import->uri)) {
+ || QQmlMetaType::latestModuleVersion(import->uri).isValid()) {
if (!m_importCache.addLibraryImport(
importDatabase, import->uri, import->qualifier, import->version,
- QString(), QString(), flags, errors)) {
+ QString(), QString(), flags, errors).isValid()) {
return false;
}
} else {
@@ -638,11 +650,17 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo
: QQmlImportDatabase::Remote);
if (!remotePathList.isEmpty()) {
// Add this library and request the possible locations for it
- if (!m_importCache.addLibraryImport(
+ const QTypeRevision version = m_importCache.addLibraryImport(
importDatabase, import->uri, import->qualifier, import->version,
- QString(), QString(), flags | QQmlImports::ImportIncomplete, errors))
+ QString(), QString(), flags | QQmlImports::ImportIncomplete, errors);
+
+ if (!version.isValid())
return false;
+ // Use more specific version for finding the qmldir if possible
+ if (version.hasMajorVersion())
+ import->version = version;
+
// Probe for all possible locations
int priority = 0;
const QStringList qmlDirPaths = QQmlImports::completeQmldirPaths(
@@ -678,10 +696,16 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo
incomplete = true;
}
- if (!m_importCache.addFileImport(importDatabase, import->uri, import->qualifier,
- import->version, incomplete, errors))
+ const QTypeRevision version = m_importCache.addFileImport(
+ importDatabase, import->uri, import->qualifier, import->version, incomplete,
+ errors);
+ if (!version.isValid())
return false;
+ // Use more specific version for the qmldir if possible
+ if (version.hasMajorVersion())
+ import->version = version;
+
if (incomplete) {
if (!fetchQmldir(qmldirUrl, import, 1, errors))
return false;