diff options
Diffstat (limited to 'tools/qmlplugindump/main.cpp')
-rw-r--r-- | tools/qmlplugindump/main.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index f312604e17..854a63756e 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -352,23 +352,23 @@ public: } } - QString getPrototypeNameForCompositeType(const QMetaObject *metaObject) + QString getPrototypeNameForCompositeType(const QMetaObject *metaObject, QSet<QByteArray> &defaultReachableNames) { QString prototypeName; - const QMetaObject *superMetaObject = metaObject->superClass(); - if (!superMetaObject) - return "QObject"; - QString className = convertToId(superMetaObject->className()); - if (className.startsWith("QQuick")) - prototypeName = className; - else - prototypeName = getPrototypeNameForCompositeType(superMetaObject); + if (!defaultReachableNames.contains(metaObject->className())) { + const QMetaObject *superMetaObject = metaObject->superClass(); + if (!superMetaObject) + prototypeName = "QObject"; + else + prototypeName = getPrototypeNameForCompositeType(superMetaObject, defaultReachableNames); + } else { + prototypeName = convertToId(metaObject->className()); + } return prototypeName; } void dumpComposite(QQmlEngine *engine, const QQmlType *compositeType, QSet<QByteArray> &defaultReachableNames) { - QQmlComponent e(engine, compositeType->sourceUrl()); QObject *object = e.create(); @@ -380,7 +380,7 @@ public: const QMetaObject *mainMeta = object->metaObject(); // Get C++ base class name for the composite type - QString prototypeName = getPrototypeNameForCompositeType(mainMeta); + QString prototypeName = getPrototypeNameForCompositeType(mainMeta, defaultReachableNames); qml->writeScriptBinding(QLatin1String("prototype"), enquote(prototypeName)); QString qmlTyName = compositeType->qmlTypeName(); |