From 8b45f1f6c58ee605655f0254c6b037450f65b3a5 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 12 Oct 2021 16:07:19 +0200 Subject: [PATCH] QmlDesigner: Only create components as primitives if actually possible The type might not actually be exported and imported as a folder import. Change-Id: I0ada27d619727044c2f8b8a601a2632a44c5a7cb Reviewed-by: Miikka Heikkinen Reviewed-by: Qt CI Bot --- .../instances/servernodeinstance.cpp | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp index 2aa17d9e2b7..fc5118727b4 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp @@ -234,6 +234,25 @@ bool isInPathList(const QStringList &pathList, const QString &componentPath) }); } +bool canBeCreatedAsPrimitive(const QStringList &pathList, + const InstanceContainer &instanceContainer, + QQmlContext *context, + QObject *&object) +{ + if (isInPathList(pathList, instanceContainer.componentPath())) { + object = Internal::ObjectNodeInstance::createPrimitive(QString::fromUtf8( + instanceContainer.type()), + instanceContainer.majorNumber(), + instanceContainer.minorNumber(), + context); + + if (object) + return true; + + } + return false; +} + ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceServer, const InstanceContainer &instanceContainer, ComponentWrap componentWrap) @@ -249,8 +268,8 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe if (object == nullptr) nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, QLatin1String("Custom parser object could not be created."), instanceContainer.instanceId()); } else if (!instanceContainer.componentPath().isEmpty() - && !isInPathList(nodeInstanceServer->engine()->importPathList(), - instanceContainer.componentPath())) { + && !canBeCreatedAsPrimitive(nodeInstanceServer->engine()->importPathList(), + instanceContainer, nodeInstanceServer->context(), object)) { object = Internal::ObjectNodeInstance::createComponent(instanceContainer.componentPath(), nodeInstanceServer->context()); if (object == nullptr) { object = Internal::ObjectNodeInstance::createPrimitive(QString::fromUtf8(instanceContainer.type()), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context()); @@ -260,7 +279,7 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, message + errors, instanceContainer.instanceId()); } } - } else { + } else if (!object) { object = Internal::ObjectNodeInstance::createPrimitive(QString::fromUtf8(instanceContainer.type()), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context()); if (object == nullptr) nodeInstanceServer->sendDebugOutput(DebugOutputCommand::ErrorType, QLatin1String("Item could not be created."), instanceContainer.instanceId());