aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltypeloader.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-06-04 15:47:50 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-06-11 18:06:53 +0200
commit8311d0135ed27b457144bfa0b9587f12cf17b364 (patch)
treeb96fc9e18cd9ca9864cfb118a37887d7b15bc5db /src/qml/qml/qqmltypeloader.cpp
parent11a09e212877988d37416842ad73d9aa357ba51f (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.cpp26
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;
}