diff options
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 27 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine_p.h | 1 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 67d2f9ae6c..7c218276c2 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -2034,18 +2034,23 @@ LoadHelper::LoadHelper(QQmlTypeLoader *loader, QAnyStringView uri) auto import = std::make_shared<PendingImport>(); import->uri = uri.toString(); QList<QQmlError> errorList; - Blob::addImport(import, &errorList); + if (!Blob::addImport(import, &errorList)) + m_uri = QString(); // reset m_uri to remember the failure } LoadHelper::ResolveTypeResult LoadHelper::resolveType(QAnyStringView typeName) { QQmlType type; - QQmlTypeModule *module = QQmlMetaType::typeModule(m_uri, QTypeRevision{}); - if (!module) + if (!couldFindModule()) return {ResolveTypeResult::NoSuchModule, type}; - type = module->type(typeName.toString(), {}); - if (type.isValid()) - return {ResolveTypeResult::ModuleFound, type}; + QQmlTypeModule *module = QQmlMetaType::typeModule(m_uri, QTypeRevision{}); + if (module) { + type = module->type(typeName.toString(), {}); + if (type.isValid()) + return {ResolveTypeResult::ModuleFound, type}; + } + // The module exists (see check above), but there is no QQmlTypeModule + // ==> pure QML module, attempt resolveType QTypeRevision versionReturn; QList<QQmlError> errors; QQmlImportNamespace *ns_return = nullptr; @@ -2055,6 +2060,16 @@ LoadHelper::ResolveTypeResult LoadHelper::resolveType(QAnyStringView typeName) return {ResolveTypeResult::ModuleFound, type}; } +bool LoadHelper::couldFindModule() const +{ + if (m_uri.isEmpty()) + return false; + for (const auto &import: std::as_const(m_unresolvedImports)) + if (import->priority == 0) // compare QQmlTypeData::allDependenciesDone + return false; + return true; +} + QT_END_NAMESPACE #include "moc_qqmlengine_p.cpp" diff --git a/src/qml/qml/qqmlengine_p.h b/src/qml/qml/qqmlengine_p.h index 366d34c366..26969467b8 100644 --- a/src/qml/qml/qqmlengine_p.h +++ b/src/qml/qml/qqmlengine_p.h @@ -395,6 +395,7 @@ protected: void initializeFromCachedUnit(const QQmlPrivate::CachedQmlUnit *) final { Q_UNREACHABLE(); } private: + bool couldFindModule() const; QString m_uri; }; |