aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/qml/qqmlengine.cpp27
-rw-r--r--src/qml/qml/qqmlengine_p.h1
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;
};