diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-04 15:47:50 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-11 18:06:53 +0200 |
commit | 8311d0135ed27b457144bfa0b9587f12cf17b364 (patch) | |
tree | b96fc9e18cd9ca9864cfb118a37887d7b15bc5db /src/qml/qml/qqmltypeloader.cpp | |
parent | 11a09e212877988d37416842ad73d9aa357ba51f (diff) |
QML: Fix precedence of module imports
Types imported transitively via a qmldir import statement should not
shadow types available from the module itself.
Change-Id: Id34edc5c5e2fff4ba37009f4bab9039b7ed18dff
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqmltypeloader.cpp')
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 1b7993af61..ff0633a475 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -556,12 +556,14 @@ bool QQmlTypeLoader::Blob::updateQmldir(const QQmlRefPointer<QQmlQmldirData> &da return true; } -bool QQmlTypeLoader::Blob::addImport(const QV4::CompiledData::Import *import, QList<QQmlError> *errors) +bool QQmlTypeLoader::Blob::addImport(const QV4::CompiledData::Import *import, uint flags, + QList<QQmlError> *errors) { - return addImport(std::make_shared<PendingImport>(this, import), errors); + return addImport(std::make_shared<PendingImport>(this, import), flags, errors); } -bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr import, QList<QQmlError> *errors) +bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr import, uint flags, + QList<QQmlError> *errors) { Q_ASSERT(errors); @@ -584,7 +586,7 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo // This is a local library import if (!m_importCache.addLibraryImport( importDatabase, import->uri, import->qualifier, - import->version, qmldirFilePath, qmldirUrl, false, errors)) + import->version, qmldirFilePath, qmldirUrl, flags, errors)) return false; if (!loadImportDependencies(import, qmldirFilePath, errors)) @@ -618,7 +620,7 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo if (!m_importCache.addLibraryImport( importDatabase, import->uri, import->qualifier, import->version, - QString(), QString(), false, errors)) { + QString(), QString(), flags, errors)) { return false; } } else { @@ -638,7 +640,7 @@ bool QQmlTypeLoader::Blob::addImport(QQmlTypeLoader::Blob::PendingImportPtr impo // Add this library and request the possible locations for it if (!m_importCache.addLibraryImport( importDatabase, import->uri, import->qualifier, import->version, - QString(), QString(), true, errors)) + QString(), QString(), flags | QQmlImports::ImportIncomplete, errors)) return false; // Probe for all possible locations @@ -721,11 +723,19 @@ bool QQmlTypeLoader::Blob::loadImportDependencies(PendingImportPtr currentImport dependencyImport->uri = implicitImport; dependencyImport->qualifier = currentImport->qualifier; dependencyImport->version = currentImport->version; - if (!addImport(dependencyImport, errors)) + if (!addImport(dependencyImport, QQmlImports::ImportLowPrecedence, errors)) { + QQmlError error; + error.setDescription( + QString::fromLatin1( + "Failed to load dependencies for module \"%1\" version %2.%3") + .arg(currentImport->uri) + .arg(currentImport->version.majorVersion()) + .arg(currentImport->version.minorVersion())); + errors->append(error); return false; + } } - return true; } |