diff options
Diffstat (limited to 'tools/qmlplugindump/main.cpp')
-rw-r--r-- | tools/qmlplugindump/main.cpp | 99 |
1 files changed, 53 insertions, 46 deletions
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp index e05c77cbfa..4337db1689 100644 --- a/tools/qmlplugindump/main.cpp +++ b/tools/qmlplugindump/main.cpp @@ -71,6 +71,7 @@ QString pluginImportPath; bool verbose = false; +bool creatable = true; QString currentProperty; QString inObjectInstantiation; @@ -225,46 +226,48 @@ QSet<const QMetaObject *> collectReachableMetaObjects(QQmlEngine *engine, const qmlTypesByCppName[baseCpp] = baseExports; } - // find even more QMetaObjects by instantiating QML types and running - // over the instances - foreach (QQmlType *ty, QQmlMetaType::qmlTypes()) { - if (skip.contains(ty)) - continue; - if (ty->isExtendedType()) - continue; - if (!ty->isCreatable()) - continue; - if (ty->typeName() == "QQmlComponent") - continue; - - QString tyName = ty->qmlTypeName(); - tyName = tyName.mid(tyName.lastIndexOf(QLatin1Char('/')) + 1); - if (tyName.isEmpty()) - continue; - - inObjectInstantiation = tyName; - QObject *object = 0; - - if (ty->isSingleton()) { - QQmlType::SingletonInstanceInfo *siinfo = ty->singletonInstanceInfo(); - if (siinfo->qobjectCallback) { - siinfo->init(engine); - collectReachableMetaObjects(object, &metas); - object = siinfo->qobjectApi(engine); + if (creatable) { + // find even more QMetaObjects by instantiating QML types and running + // over the instances + foreach (QQmlType *ty, QQmlMetaType::qmlTypes()) { + if (skip.contains(ty)) + continue; + if (ty->isExtendedType()) + continue; + if (!ty->isCreatable()) + continue; + if (ty->typeName() == "QQmlComponent") + continue; + + QString tyName = ty->qmlTypeName(); + tyName = tyName.mid(tyName.lastIndexOf(QLatin1Char('/')) + 1); + if (tyName.isEmpty()) + continue; + + inObjectInstantiation = tyName; + QObject *object = 0; + + if (ty->isSingleton()) { + QQmlType::SingletonInstanceInfo *siinfo = ty->singletonInstanceInfo(); + if (siinfo->qobjectCallback) { + siinfo->init(engine); + collectReachableMetaObjects(object, &metas); + object = siinfo->qobjectApi(engine); + } else { + inObjectInstantiation.clear(); + continue; // we don't handle QJSValue singleton types. + } } else { - inObjectInstantiation.clear(); - continue; // we don't handle QJSValue singleton types. + object = ty->create(); } - } else { - object = ty->create(); - } - inObjectInstantiation.clear(); + inObjectInstantiation.clear(); - if (object) - collectReachableMetaObjects(object, &metas); - else - qWarning() << "Could not create" << tyName; + if (object) + collectReachableMetaObjects(object, &metas); + else + qWarning() << "Could not create" << tyName; + } } return metas; @@ -330,17 +333,13 @@ public: qSort(exportStrings); qml->writeArrayBinding(QLatin1String("exports"), exportStrings); - // write meta object revisions unless they're all zero + // write meta object revisions QStringList metaObjectRevisions; - bool shouldWriteMetaObjectRevisions = false; foreach (const QString &exportString, exportStrings) { int metaObjectRevision = exports[exportString]->metaObjectRevision(); - if (metaObjectRevision != 0) - shouldWriteMetaObjectRevisions = true; metaObjectRevisions += QString::number(metaObjectRevision); } - if (shouldWriteMetaObjectRevisions) - qml->writeArrayBinding(QLatin1String("exportMetaObjectRevisions"), metaObjectRevisions); + qml->writeArrayBinding(QLatin1String("exportMetaObjectRevisions"), metaObjectRevisions); if (const QMetaObject *attachedType = (*qmlTypes.begin())->attachedPropertiesType()) { // Can happen when a type is registered that returns itself as attachedPropertiesType() @@ -544,8 +543,8 @@ void sigSegvHandler(int) { void printUsage(const QString &appName) { qWarning() << qPrintable(QString( - "Usage: %1 [-v] [-notrelocatable] module.uri version [module/import/path]\n" - " %1 [-v] -path path/to/qmldir/directory [version]\n" + "Usage: %1 [-v] [-noinstantiate] [-[non]relocatable] module.uri version [module/import/path]\n" + " %1 [-v] [-noinstantiate] -path path/to/qmldir/directory [version]\n" " %1 [-v] -builtins\n" "Example: %1 Qt.labs.folderlistmodel 2.0 /home/user/dev/qt-install/imports").arg( appName)); @@ -566,7 +565,7 @@ int main(int argc, char *argv[]) #endif #ifdef QT_SIMULATOR - // Running this application would bring up the Qt Simulator (since it links QtGui), avoid that! + // Running this application would bring up the Qt Simulator (since it links Qt GUI), avoid that! QtSimulatorPrivate::SimulatorConnection::createStubInstance(); #endif @@ -595,8 +594,16 @@ int main(int argc, char *argv[]) } if (arg == QLatin1String("--notrelocatable") - || arg == QLatin1String("-notrelocatable")) { + || arg == QLatin1String("-notrelocatable") + || arg == QLatin1String("--nonrelocatable") + || arg == QLatin1String("-nonrelocatable")) { relocatable = false; + } else if (arg == QLatin1String("--relocatable") + || arg == QLatin1String("-relocatable")) { + relocatable = true; + } else if (arg == QLatin1String("--noinstantiate") + || arg == QLatin1String("-noinstantiate")) { + creatable = false; } else if (arg == QLatin1String("--path") || arg == QLatin1String("-path")) { action = Path; |