From d66d323f93d05c4180d7123429190dcae2260ea9 Mon Sep 17 00:00:00 2001 From: Marco Benelli Date: Thu, 22 Oct 2015 12:33:43 +0200 Subject: Proper handling of composite types with different versions. Change-Id: I967da2eb1867f218d47faf8a589d1773e6f57fc7 Reviewed-by: Kai Koehne --- tools/qmlplugindump/main.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'tools') 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 > qmlTypesByCppName; -// No different versioning possible for a composite type. -static QMap qmlTypesByCompositeName; +/* A composite type is completely specified by name, major version and minor version. +*/ +static QMap > qmlTypesByCompositeName; static QHash cppToId; @@ -202,7 +203,7 @@ void collectReachableMetaObjectsWithoutQmlName(QQmlEnginePrivate *engine, QSetisComposite()) { collectReachableMetaObjects(engine, ty, &metas); } else { - qmlTypesByCompositeName[ty->elementName()] = ty; + qmlTypesByCompositeName[ty->elementName()].insert(ty); } } } @@ -228,7 +229,7 @@ QSet 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 &defaultReachableNames) + void dumpComposite(QQmlEngine *engine, const QSet &compositeType, QSet &defaultReachableNames) + { + foreach (const QQmlType *type, compositeType) + dumpCompositeItem(engine, type, defaultReachableNames); + } + + void dumpCompositeItem(QQmlEngine *engine, const QQmlType *compositeType, QSet &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 >::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. -- cgit v1.2.3 From b35301f0b1ff88bf99ba1e88c4a14bc54431853d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 13 Nov 2015 08:30:21 +0100 Subject: qmlimportscanner: Improve command line help. Output example line containing the Qt import path ready for copy & paste. Task-number: QTBUG-48424 Change-Id: I44d0793ade4322d376ed2b72e5c3935b19ba2c7d Reviewed-by: J-P Nurmi --- tools/qmlimportscanner/main.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 56cca8fcb4..b16253a192 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -60,13 +60,20 @@ QT_USE_NAMESPACE QStringList g_qmlImportPaths; -void printUsage(const QString &appName) +static void printUsage(const QString &appNameIn) { - std::cerr << qPrintable(QString::fromLatin1( - "Usage: %1 -rootPath path/to/app/qml/directory -importPath path/to/qt/qml/directory \n" - " %1 -qmlFiles file1 file2 -importPath path/to/qt/qml/directory \n" - "Example: %1 -rootPath . -importPath /home/user/dev/qt-install/qml \n").arg( - appName)); + const std::wstring appName = appNameIn.toStdWString(); +#ifndef QT_BOOTSTRAPPED + const QString qmlPath = QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath); +#else + const QString qmlPath = QStringLiteral("/home/user/dev/qt-install/qml"); +#endif + std::wcerr + << "Usage: " << appName << " -rootPath path/to/app/qml/directory -importPath path/to/qt/qml/directory\n" + " " << appName << " -qmlFiles file1 file2 -importPath path/to/qt/qml/directory\n\n" + "Example: " << appName << " -rootPath . -importPath " + << QDir::toNativeSeparators(qmlPath).toStdWString() + << '\n'; } QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, const QString &code, const QString &path) -- cgit v1.2.3