aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMarco Benelli <marco.benelli@theqtcompany.com>2015-10-22 12:33:43 +0200
committerKai Koehne <kai.koehne@theqtcompany.com>2015-11-03 14:55:43 +0000
commitd66d323f93d05c4180d7123429190dcae2260ea9 (patch)
treeb11753619d94ea8260ee628d358866d42ac1b430 /tools
parent164af37710e5721cbc7d79a0af20f2387181c59c (diff)
Proper handling of composite types with different versions.
Change-Id: I967da2eb1867f218d47faf8a589d1773e6f57fc7 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/qmlplugindump/main.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp
index 98c9b54bcd..36a5c5ab76 100644
--- a/tools/qmlplugindump/main.cpp
+++ b/tools/qmlplugindump/main.cpp
@@ -152,8 +152,9 @@ public:
*/
static QHash<QByteArray, QSet<const QQmlType *> > qmlTypesByCppName;
-// No different versioning possible for a composite type.
-static QMap<QString, const QQmlType * > qmlTypesByCompositeName;
+/* A composite type is completely specified by name, major version and minor version.
+*/
+static QMap<QString, QSet<const QQmlType *> > qmlTypesByCompositeName;
static QHash<QByteArray, QByteArray> cppToId;
@@ -202,7 +203,7 @@ void collectReachableMetaObjectsWithoutQmlName(QQmlEnginePrivate *engine, QSet<c
if (!ty->isComposite()) {
collectReachableMetaObjects(engine, ty, &metas);
} else {
- qmlTypesByCompositeName[ty->elementName()] = ty;
+ qmlTypesByCompositeName[ty->elementName()].insert(ty);
}
}
}
@@ -228,7 +229,7 @@ QSet<const QMetaObject *> collectReachableMetaObjects(QQmlEngine *engine,
extensions[ty->typeName()].insert(ty->metaObject()->className());
collectReachableMetaObjects(QQmlEnginePrivate::get(engine), ty, &metas);
} else {
- qmlTypesByCompositeName[ty->elementName()] = ty;
+ qmlTypesByCompositeName[ty->elementName()].insert(ty);
}
}
@@ -459,7 +460,13 @@ public:
return prototypeName;
}
- void dumpComposite(QQmlEngine *engine, const QQmlType *compositeType, QSet<QByteArray> &defaultReachableNames)
+ void dumpComposite(QQmlEngine *engine, const QSet<const QQmlType *> &compositeType, QSet<QByteArray> &defaultReachableNames)
+ {
+ foreach (const QQmlType *type, compositeType)
+ dumpCompositeItem(engine, type, defaultReachableNames);
+ }
+
+ void dumpCompositeItem(QQmlEngine *engine, const QQmlType *compositeType, QSet<QByteArray> &defaultReachableNames)
{
QQmlComponent e(engine, compositeType->sourceUrl());
if (!e.isReady()) {
@@ -485,9 +492,8 @@ public:
qml->writeScriptBinding(QLatin1String("prototype"), enquote(prototypeName));
QString qmlTyName = compositeType->qmlTypeName();
- // name should be unique
- qml->writeScriptBinding(QLatin1String("name"), enquote(qmlTyName));
const QString exportString = getExportString(qmlTyName, compositeType->majorVersion(), compositeType->minorVersion());
+ qml->writeScriptBinding(QLatin1String("name"), exportString);
qml->writeArrayBinding(QLatin1String("exports"), QStringList() << exportString);
qml->writeArrayBinding(QLatin1String("exportMetaObjectRevisions"), QStringList() << QString::number(compositeType->minorVersion()));
qml->writeBooleanBinding(QLatin1String("isComposite"), true);
@@ -1176,8 +1182,10 @@ int main(int argc, char *argv[])
foreach (const QMetaObject *meta, nameToMeta) {
dumper.dump(QQmlEnginePrivate::get(&engine), meta, uncreatableMetas.contains(meta), singletonMetas.contains(meta));
}
- foreach (const QQmlType *compositeType, qmlTypesByCompositeName)
- dumper.dumpComposite(&engine, compositeType, defaultReachableNames);
+
+ QMap<QString, QSet<const QQmlType *> >::const_iterator iter = qmlTypesByCompositeName.constBegin();
+ for (; iter != qmlTypesByCompositeName.constEnd(); ++iter)
+ dumper.dumpComposite(&engine, iter.value(), defaultReachableNames);
// define QEasingCurve as an extension of QQmlEasingValueType, this way
// properties using the QEasingCurve type get useful type information.