AssetExport: Fix incorrect Node lineage

Task-number: QDS-2667
Change-Id: I50bd4fbd093734d2df35fce8aed57af28469d358
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Vikas Pachdha
2020-09-01 13:52:41 +02:00
parent 980ba0d83d
commit 727f25fbd6

View File

@@ -30,6 +30,7 @@
#include "model.h" #include "model.h"
#include "nodeabstractproperty.h" #include "nodeabstractproperty.h"
#include "nodemetainfo.h"
#include "rewriterview.h" #include "rewriterview.h"
#include "utils/qtcassert.h" #include "utils/qtcassert.h"
@@ -41,13 +42,16 @@
namespace { namespace {
Q_LOGGING_CATEGORY(loggerInfo, "qtc.designer.assetExportPlugin.modelExporter", QtInfoMsg) Q_LOGGING_CATEGORY(loggerInfo, "qtc.designer.assetExportPlugin.modelExporter", QtInfoMsg)
static void populateLineage(const QmlDesigner::ModelNode &node, QByteArrayList &lineage) static QByteArrayList populateLineage(const QmlDesigner::ModelNode &node)
{ {
QByteArrayList lineage;
if (!node.isValid() || node.type().isEmpty()) if (!node.isValid() || node.type().isEmpty())
return; return {};
lineage.append(node.type());
if (node.hasParentProperty()) for (auto &info : node.metaInfo().superClasses())
populateLineage(node.parentProperty().parentModelNode(), lineage); lineage.append(info.typeName());
return lineage;
} }
} }
@@ -86,8 +90,7 @@ void Component::exportComponent()
ModelNodeParser *Component::createNodeParser(const ModelNode &node) const ModelNodeParser *Component::createNodeParser(const ModelNode &node) const
{ {
QByteArrayList lineage; QByteArrayList lineage = populateLineage(node);
populateLineage(node, lineage);
std::unique_ptr<ModelNodeParser> reader; std::unique_ptr<ModelNodeParser> reader;
for (auto &parserCreator: m_readers) { for (auto &parserCreator: m_readers) {
std::unique_ptr<ModelNodeParser> r(parserCreator->instance(lineage, node)); std::unique_ptr<ModelNodeParser> r(parserCreator->instance(lineage, node));
@@ -120,8 +123,8 @@ QJsonObject Component::nodeToJson(const ModelNode &node)
} }
jsonObject = parser->json(*this); jsonObject = parser->json(*this);
} else { } else {
ExportNotification::addError(tr("Error exporting component %1. Parser unavailable.") ExportNotification::addError(tr("Error exporting node %1. Cannot parse type %2.")
.arg(node.id())); .arg(node.id()).arg(QString::fromUtf8(node.type())));
} }
QJsonArray children; QJsonArray children;