forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user