diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-10-22 10:31:20 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-10-22 13:11:05 +0200 |
commit | 1c20848692eb3b64d74cde7d040457198c4f0e73 (patch) | |
tree | df9d6046708bafb9699f65c0051f3201a14e7b8e /src | |
parent | 848404283e7fe09a38e4227ef416f0436a49a7d3 (diff) |
QmlCompiler: Make sure any import depends on the builtins
Otherwise types like "int" are not resolved.
Change-Id: I35d0eb05e955822b082d2f6067d1e5b40c510cf1
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qmlcompiler/qqmljsimporter.cpp | 19 | ||||
-rw-r--r-- | src/qmlcompiler/qqmljsimporter_p.h | 9 |
2 files changed, 18 insertions, 10 deletions
diff --git a/src/qmlcompiler/qqmljsimporter.cpp b/src/qmlcompiler/qqmljsimporter.cpp index c6640316fa..4d95f61f94 100644 --- a/src/qmlcompiler/qqmljsimporter.cpp +++ b/src/qmlcompiler/qqmljsimporter.cpp @@ -234,10 +234,14 @@ void QQmlJSImporter::processImport( */ QQmlJSImporter::ImportedTypes QQmlJSImporter::importBuiltins() { - if (!m_builtins.isEmpty()) - return m_builtins; + return builtinImportHelper().qmlNames; +} + - AvailableTypes types; +QQmlJSImporter::AvailableTypes QQmlJSImporter::builtinImportHelper() +{ + if (!m_builtins.qmlNames.isEmpty() || !m_builtins.cppNames.isEmpty()) + return m_builtins; for (auto const &dir : m_importPaths) { Import result; @@ -245,11 +249,10 @@ QQmlJSImporter::ImportedTypes QQmlJSImporter::importBuiltins() QDirIterator::Subdirectories }; while (it.hasNext()) readQmltypes(it.next(), &result.objects, &result.dependencies); - importDependencies(result, &types); - processImport(result, &types); + importDependencies(result, &m_builtins); + processImport(result, &m_builtins); } - m_builtins = types.qmlNames; return m_builtins; } @@ -258,7 +261,7 @@ QQmlJSImporter::ImportedTypes QQmlJSImporter::importBuiltins() */ QQmlJSImporter::ImportedTypes QQmlJSImporter::importQmltypes(const QStringList &qmltypesFiles) { - AvailableTypes types; + AvailableTypes types(builtinImportHelper().cppNames); Import result; for (const auto &qmltypeFile : qmltypesFiles) @@ -273,7 +276,7 @@ QQmlJSImporter::ImportedTypes QQmlJSImporter::importQmltypes(const QStringList & QQmlJSImporter::ImportedTypes QQmlJSImporter::importModule( const QString &module, const QString &prefix, QTypeRevision version) { - AvailableTypes result; + AvailableTypes result(builtinImportHelper().cppNames); importHelper(module, &result, prefix, version); return result.qmlNames; } diff --git a/src/qmlcompiler/qqmljsimporter_p.h b/src/qmlcompiler/qqmljsimporter_p.h index 5ff2631b0a..8d8c8f8779 100644 --- a/src/qmlcompiler/qqmljsimporter_p.h +++ b/src/qmlcompiler/qqmljsimporter_p.h @@ -49,7 +49,7 @@ class QQmlJSImporter public: using ImportedTypes = QHash<QString, QQmlJSScope::ConstPtr>; - QQmlJSImporter(const QStringList &importPaths) : m_importPaths(importPaths) {} + QQmlJSImporter(const QStringList &importPaths) : m_importPaths(importPaths), m_builtins({}) {} ImportedTypes importBuiltins(); ImportedTypes importQmltypes(const QStringList &qmltypesFiles); @@ -73,6 +73,10 @@ private: struct AvailableTypes { + AvailableTypes(QHash<QString, QQmlJSScope::ConstPtr> builtins) + : cppNames(std::move(builtins)) + {} + // C++ names used in qmltypes files for non-composite types QHash<QString, QQmlJSScope::ConstPtr> cppNames; @@ -87,6 +91,7 @@ private: QList<QQmlDirParser::Import> dependencies; }; + AvailableTypes builtinImportHelper(); void importHelper(const QString &module, AvailableTypes *types, const QString &prefix = QString(), QTypeRevision version = QTypeRevision()); @@ -105,7 +110,7 @@ private: QHash<QPair<QString, QTypeRevision>, Import> m_seenImports; QHash<QString, QQmlJSScope::Ptr> m_importedFiles; QList<QQmlJS::DiagnosticMessage> m_warnings; - ImportedTypes m_builtins; + AvailableTypes m_builtins; }; QT_END_NAMESPACE |