aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-10-22 10:31:20 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-10-22 13:11:05 +0200
commit1c20848692eb3b64d74cde7d040457198c4f0e73 (patch)
treedf9d6046708bafb9699f65c0051f3201a14e7b8e /src/qmlcompiler
parent848404283e7fe09a38e4227ef416f0436a49a7d3 (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/qmlcompiler')
-rw-r--r--src/qmlcompiler/qqmljsimporter.cpp19
-rw-r--r--src/qmlcompiler/qqmljsimporter_p.h9
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