From 8867fd2a9bcef8cdd4e84663cf5fd7725e1d0cbc Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 10 Mar 2022 20:06:28 +0100 Subject: [PATCH] QmlDesigner: Quailfy library and directory imports This unifies the behavior with the TextToModelMerger for consistency. When parsing QML documents the types are already qualified in the same way. The plan is to use NodeMetaInfo also in the TextToModelMerger in the future. Change-Id: I046f39d87f1be0506740e3a4afdfbff9b13eca4b Reviewed-by: Tim Jenssen Reviewed-by: Reviewed-by: Thomas Hartmann --- .../designercore/metainfo/nodemetainfo.cpp | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 84278234d48..1497c5da22c 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -767,12 +767,16 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i const ObjectValue *objectValue = getObjectValue(); if (objectValue) { const CppComponentValue *qmlValue = value_cast(objectValue); + if (qmlValue) { if (m_majorVersion == -1 && m_minorVersion == -1) { m_majorVersion = qmlValue->componentVersion().majorVersion(); m_minorVersion = qmlValue->componentVersion().minorVersion(); - m_qualfiedTypeName = qmlValue->moduleName().toUtf8() + '.' + qmlValue->className().toUtf8(); - } else if (m_majorVersion == qmlValue->componentVersion().majorVersion() && m_minorVersion == qmlValue->componentVersion().minorVersion()) { + m_qualfiedTypeName = qmlValue->moduleName().toUtf8() + '.' + + qmlValue->className().toUtf8(); + + } else if (m_majorVersion == qmlValue->componentVersion().majorVersion() + && m_minorVersion == qmlValue->componentVersion().minorVersion()) { m_qualfiedTypeName = qmlValue->moduleName().toUtf8() + '.' + qmlValue->className().toUtf8(); } else { return; @@ -780,10 +784,16 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i } else { m_isFileComponent = true; const Imports *imports = context()->imports(document()); - ImportInfo importInfo = imports->info(lookupNameComponent().constLast(), context().data()); - if (importInfo.isValid() && importInfo.type() == ImportType::Library) { - m_majorVersion = importInfo.version().majorVersion(); - m_minorVersion = importInfo.version().minorVersion(); + const ImportInfo importInfo = imports->info(lookupNameComponent().constLast(), context().data()); + if (importInfo.isValid()) { + if (importInfo.type() == ImportType::Library) { + m_majorVersion = importInfo.version().majorVersion(); + m_minorVersion = importInfo.version().minorVersion(); + } + bool prepandName = (importInfo.type() == ImportType::Library || importInfo.type() == ImportType::Directory) + && !m_qualfiedTypeName.contains('.'); + if (prepandName) + m_qualfiedTypeName.prepend(importInfo.name().toUtf8() + '.'); } } m_objectValue = objectValue;