diff options
Diffstat (limited to 'tools/qmlimportscanner/main.cpp')
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 66 |
1 files changed, 54 insertions, 12 deletions
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 8209236916..4222d9ef46 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -71,6 +71,14 @@ inline QString dependenciesLiteral() { return QStringLiteral("dependencies"); } inline QString moduleLiteral() { return QStringLiteral("module"); } inline QString javascriptLiteral() { return QStringLiteral("javascript"); } inline QString directoryLiteral() { return QStringLiteral("directory"); } +inline QString componentsLiteral() +{ + return QStringLiteral("components"); +} +inline QString scriptsLiteral() +{ + return QStringLiteral("scripts"); +} void printUsage(const QString &appNameIn) { @@ -150,21 +158,42 @@ QVariantMap pluginsForModulePath(const QString &modulePath) { QString plugins; QString classnames; QStringList dependencies; + QStringList componentFiles; + QStringList scriptFiles; QByteArray line; do { line = qmldirFile.readLine(); - if (line.startsWith("plugin")) { - plugins += QString::fromUtf8(line.split(' ').at(1)); - plugins += QLatin1Char(' '); - } else if (line.startsWith("classname")) { - classnames += QString::fromUtf8(line.split(' ').at(1)); - classnames += QLatin1Char(' '); - } else if (line.startsWith("depends")) { - const QList<QByteArray> dep = line.split(' '); - if (dep.length() != 3) - std::cerr << "depends: expected 2 arguments: module identifier and version" << std::endl; - else - dependencies << QString::fromUtf8(dep[1]) + QLatin1Char(' ') + QString::fromUtf8(dep[2]).simplified(); + const QList<QByteArray> sections = line.split(' '); + if (sections.size() > 0) { + const QByteArray §ionType = sections.at(0); + if (sectionType == "plugin") { + plugins += QString::fromUtf8(line.split(' ').at(1)); + plugins += QLatin1Char(' '); + } else if (sectionType == "classname") { + classnames += QString::fromUtf8(line.split(' ').at(1)); + classnames += QLatin1Char(' '); + } else if (sectionType == "depends") { + if (sections.size() != 3) + std::cerr << "depends: expected 2 arguments: module identifier and version" + << std::endl; + else + dependencies << QString::fromUtf8(sections.at(1)) + QLatin1Char(' ') + + QString::fromUtf8(sections.at(2)).simplified(); + } else if (sections.size() == 2 && sectionType != "module" + && sectionType != "typeinfo") { + componentFiles.append(modulePath + QLatin1Char('/') + + QString::fromUtf8(sections.at(1))); + } else if (sections.size() == 3 + || (sectionType == "singleton" && sections.size() == 4)) { + int fileNameIndex = (sectionType == "singleton") ? 3 : 2; + const QString fileName = QString::fromUtf8(sections.at(fileNameIndex)); + const QString filePath = modulePath + QLatin1Char('/') + fileName; + if (fileName.endsWith(QLatin1String(".js")) + || fileName.endsWith(QLatin1String(".mjs"))) + scriptFiles.append(filePath); + else + componentFiles.append(filePath); + } } } while (line.length() > 0); @@ -173,7 +202,12 @@ QVariantMap pluginsForModulePath(const QString &modulePath) { pluginInfo[pluginsLiteral()] = plugins.simplified(); pluginInfo[classnamesLiteral()] = classnames.simplified(); if (dependencies.length()) + dependencies.removeDuplicates(); pluginInfo[dependenciesLiteral()] = dependencies; + if (!componentFiles.isEmpty()) + pluginInfo[componentsLiteral()] = componentFiles; + if (!scriptFiles.isEmpty()) + pluginInfo[scriptsLiteral()] = scriptFiles; return pluginInfo; } @@ -247,6 +281,8 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) QVariantMap plugininfo = pluginsForModulePath(import.value(pathLiteral()).toString()); QString plugins = plugininfo.value(pluginsLiteral()).toString(); QString classnames = plugininfo.value(classnamesLiteral()).toString(); + QStringList components = plugininfo.value(componentsLiteral()).toStringList(); + QStringList scripts = plugininfo.value(scriptsLiteral()).toStringList(); if (!plugins.isEmpty()) import.insert(QStringLiteral("plugin"), plugins); if (!classnames.isEmpty()) @@ -262,6 +298,12 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) importsCopy.append(depImport); } } + if (!components.isEmpty()) { + import.insert(componentsLiteral(), components); + } + if (!scripts.isEmpty()) { + import.insert(scriptsLiteral(), scripts); + } } done.append(import); } |