From c911349b8bdcc7f798091eb6acd20395883b2000 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 1 Mar 2019 17:15:12 +0100 Subject: Fix re-dumping of composite types Just like with 'normal' types, we don't want to include composite types that were actually part of depending imports. So we need to remove them from the list. This fixes an issue with QtQuick.Controls style plugins, were so far types from QtQuick.Controls 2 imports were re-dumped. Change-Id: Ib099ae9cfba35218cab852d4d260369c2a652727 Reviewed-by: Ulf Hermann --- tools/qmlplugindump/main.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'tools/qmlplugindump') diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index 06dd6abe2b..67ffd5a555 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -1183,8 +1183,8 @@ int main(int argc, char *argv[]) // find all QMetaObjects reachable from the builtin module QSet uncreatableMetas; QSet singletonMetas; - QMap> compositeTypes; - QSet defaultReachable = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, compositeTypes); + QMap> defaultCompositeTypes; + QSet defaultReachable = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, defaultCompositeTypes); QList defaultTypes = QQmlMetaType::qmlTypes(); // add some otherwise unreachable QMetaObjects @@ -1195,6 +1195,9 @@ int main(int argc, char *argv[]) // this will hold the meta objects we want to dump information of QSet metas; + // composite types we want to dump information of + QMap> compositeTypes; + if (action == Builtins) { for (const QMetaObject *m : qAsConst(defaultReachable)) { if (m->className() == QLatin1String("Qt")) { @@ -1271,6 +1274,14 @@ int main(int argc, char *argv[]) QSet candidates = collectReachableMetaObjects(&engine, uncreatableMetas, singletonMetas, compositeTypes, defaultTypes); candidates.subtract(defaultReachable); + for (QString iter: compositeTypes.keys()) { + if (defaultCompositeTypes.contains(iter)) { + QSet compositeTypesByName = compositeTypes.value(iter); + compositeTypesByName.subtract(defaultCompositeTypes.value(iter)); + compositeTypes[iter] = compositeTypesByName; + } + } + // Also eliminate meta objects with the same classname. // This is required because extended objects seem not to share // a single meta object instance. -- cgit v1.2.3