diff --git a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp index 973cb6e013a..f2f28b86174 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp @@ -30,6 +30,7 @@ #include "model.h" #include "nodeabstractproperty.h" +#include "nodemetainfo.h" #include "rewriterview.h" #include "utils/qtcassert.h" @@ -41,13 +42,16 @@ namespace { 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()) - return; - lineage.append(node.type()); - if (node.hasParentProperty()) - populateLineage(node.parentProperty().parentModelNode(), lineage); + return {}; + + for (auto &info : node.metaInfo().superClasses()) + lineage.append(info.typeName()); + + return lineage; } } @@ -86,8 +90,7 @@ void Component::exportComponent() ModelNodeParser *Component::createNodeParser(const ModelNode &node) const { - QByteArrayList lineage; - populateLineage(node, lineage); + QByteArrayList lineage = populateLineage(node); std::unique_ptr reader; for (auto &parserCreator: m_readers) { std::unique_ptr r(parserCreator->instance(lineage, node)); @@ -120,8 +123,8 @@ QJsonObject Component::nodeToJson(const ModelNode &node) } jsonObject = parser->json(*this); } else { - ExportNotification::addError(tr("Error exporting component %1. Parser unavailable.") - .arg(node.id())); + ExportNotification::addError(tr("Error exporting node %1. Cannot parse type %2.") + .arg(node.id()).arg(QString::fromUtf8(node.type()))); } QJsonArray children;