From 9ca4c75da3df7955142476ef77c1d2380cb1380e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 26 Sep 2013 11:24:30 +0200 Subject: [PATCH] Make qmlimportscanner report plugin classnames. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: Ifbe72e6dcc569c8cb311d46e4f265da348b353ea Reviewed-by: Tor Arne Vestbø --- tools/qmlimportscanner/main.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 3fc84ab..6b2d225 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -157,25 +157,34 @@ QVariantList findQmlImportsInDirectory(const QString &qmlDir) } // Read the qmldir file, extract a list of plugins by -// parsing the "plugin" lines -QString pluginsForModulePath(const QString &modulePath) -{ +// parsing the "plugin" and "classname" lines. +QVariantMap pluginsForModulePath(const QString &modulePath) { QFile qmldirFile(modulePath + QStringLiteral("/qmldir")); if (!qmldirFile.exists()) - return QString(); + return QVariantMap(); + qmldirFile.open(QIODevice::ReadOnly | QIODevice::Text); + // a qml import may contain several plugins QString plugins; + QString classnames; QByteArray line; do { line = qmldirFile.readLine(); if (line.startsWith("plugin")) { plugins += QString::fromUtf8(line.split(' ').at(1)); - plugins += QLatin1Char(' '); + plugins += QStringLiteral(" "); + } else if (line.startsWith("classname")) { + classnames += QString::fromUtf8(line.split(' ').at(1)); + classnames += QStringLiteral(" "); } + } while (line.length() > 0); - return plugins.simplified(); + QVariantMap pluginInfo; + pluginInfo[QStringLiteral("plugins")] = plugins.simplified(); + pluginInfo[QStringLiteral("classnames")] = classnames.simplified(); + return pluginInfo; } // Construct a file system path from a module uri and version. @@ -216,11 +225,14 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) foreach (QVariant importVariant, imports) { QVariantMap import = qvariant_cast(importVariant); if (import[QStringLiteral("type")] == QStringLiteral("module")) { - const QString path = findPathForImport(localPathForModule(import[QStringLiteral("name")].toString(), import[QStringLiteral("version")].toString())); - import.insert(QStringLiteral("path"), path); - const QString plugin = pluginsForModulePath(path); - if (!plugin.isEmpty()) - import[QStringLiteral("plugin")] = plugin; + import[QStringLiteral("path")] = findPathForImport(localPathForModule(import[QStringLiteral("name")].toString(), import[QStringLiteral("version")].toString())); + QVariantMap plugininfo = pluginsForModulePath(import[QStringLiteral("path")].toString()); + QString plugins = plugininfo[QStringLiteral("plugins")].toString(); + QString classnames = plugininfo[QStringLiteral("classnames")].toString(); + if (!plugins.isEmpty()) { + import[QStringLiteral("plugin")] = plugins; + import[QStringLiteral("classname")] = classnames; + } } if (!import[QStringLiteral("path")].isNull()) done.append(import); -- 2.7.4