diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-22 18:10:23 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-29 15:51:16 +0200 |
commit | d8513d338d8537506984a13bf1f4ef6507678286 (patch) | |
tree | 087b524a17c38a9bfa44849e3c8e45fdeba3423b /src/qml/qml/qqmltypeloader.cpp | |
parent | bd1c28a82c2ff955e0d154fac2e2df8d5a110dd7 (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.cpp | 42 |
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; |