diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-12-04 15:09:25 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-12-05 21:48:48 +0100 |
commit | d260e713bdf6a61e49a0944df875bead5b8c46b0 (patch) | |
tree | dd709231b06c3d909e135125ea39f0293a788148 | |
parent | d297723fe6b8ebad6c87d0e47dc795e8e48943a4 (diff) |
QmlCompiler: Don't add imports with "as" to the context
That is wrong. The context does not contain such objects. Instead, mark
the names as namespaces in the imports by giving them an empty type.
Change-Id: Ie9d0bba592863878d2220cee59be369ba2534f17
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r-- | src/qmlcompiler/qqmljsimporter.cpp | 3 | ||||
-rw-r--r-- | src/qmlcompiler/qqmljsimportvisitor.cpp | 5 | ||||
-rw-r--r-- | tools/qmllint/checkidentifiers.cpp | 7 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/qmlcompiler/qqmljsimporter.cpp b/src/qmlcompiler/qqmljsimporter.cpp index 73bc63e0fa..5b693f5c72 100644 --- a/src/qmlcompiler/qqmljsimporter.cpp +++ b/src/qmlcompiler/qqmljsimporter.cpp @@ -209,6 +209,9 @@ void QQmlJSImporter::processImport( QQmlJSImporter::AvailableTypes *types, const QString &prefix) { + if (!prefix.isEmpty()) + types->qmlNames.insert(prefix, {}); // Empty type means "this is the prefix" + for (auto it = import.scripts.begin(); it != import.scripts.end(); ++it) types->qmlNames.insert(prefixedName(prefix, it.key()), it.value()); diff --git a/src/qmlcompiler/qqmljsimportvisitor.cpp b/src/qmlcompiler/qqmljsimportvisitor.cpp index b0fe5dc1ba..96c5b3b369 100644 --- a/src/qmlcompiler/qqmljsimportvisitor.cpp +++ b/src/qmlcompiler/qqmljsimportvisitor.cpp @@ -324,11 +324,6 @@ bool QQmlJSImportVisitor::visit(QQmlJS::AST::UiImport *import) } QString path {}; - if (!import->importId.isEmpty()) { - // TODO: do not put imported ids into the same space as qml IDs - const QString importId = import->importId.toString(); - m_scopesById.insert(importId, m_rootScopeImports.value(importId)); - } auto uri = import->importUri; while (uri) { path.append(uri->name); diff --git a/tools/qmllint/checkidentifiers.cpp b/tools/qmllint/checkidentifiers.cpp index 6500595c83..b718f0f691 100644 --- a/tools/qmllint/checkidentifiers.cpp +++ b/tools/qmllint/checkidentifiers.cpp @@ -355,8 +355,13 @@ bool CheckIdentifiers::operator()( const auto typeIt = m_types.find(memberAccessBase.m_name); if (typeIt != m_types.end()) { - if (!checkMemberAccess(memberAccessChain, *typeIt)) + if (typeIt->isNull()) { + // This is a namespaced import. Check with the full name. + if (!memberAccessChain.isEmpty()) + memberAccessChain.front().m_name.prepend(memberAccessBase.m_name + u'.'); + } else if (!checkMemberAccess(memberAccessChain, *typeIt)) { noUnqualifiedIdentifier = false; + } continue; } |