diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 85542cbba8..c14fda2422 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -73,6 +73,8 @@ inline QString linkTargetLiteral() { return QStringLiteral("linkTarget"); } +inline QString componentsLiteral() { return QStringLiteral("components"); } +inline QString scriptsLiteral() { return QStringLiteral("scripts"); } void printUsage(const QString &appNameIn) { @@ -218,15 +220,21 @@ QVariantMap pluginsForModulePath(const QString &modulePath, const QString &versi } QVariantList importsFromFiles; + QStringList componentFiles; + QStringList scriptFiles; const auto components = parser.components(); for (const auto &component : components) { + const QString componentFullPath = modulePath + QLatin1Char('/') + component.fileName; + componentFiles.append(componentFullPath); importsFromFiles - += findQmlImportsInQmlFile(modulePath + QLatin1Char('/') + component.fileName); + += findQmlImportsInQmlFile(componentFullPath); } const auto scripts = parser.scripts(); for (const auto &script : scripts) { + const QString scriptFullPath = modulePath + QLatin1Char('/') + script.fileName; + scriptFiles.append(scriptFullPath); importsFromFiles - += findQmlImportsInJavascriptFile(modulePath + QLatin1Char('/') + script.fileName); + += findQmlImportsInJavascriptFile(scriptFullPath); } for (const QVariant &import : importsFromFiles) { @@ -241,6 +249,10 @@ QVariantMap pluginsForModulePath(const QString &modulePath, const QString &versi if (!importsAndDependencies.isEmpty()) pluginInfo[dependenciesLiteral()] = importsAndDependencies; + if (!componentFiles.isEmpty()) + pluginInfo[componentsLiteral()] = componentFiles; + if (!scriptFiles.isEmpty()) + pluginInfo[scriptsLiteral()] = scriptFiles; return pluginInfo; } @@ -332,6 +344,8 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) QString plugins = plugininfo.value(pluginsLiteral()).toString(); bool isOptional = plugininfo.value(pluginIsOptionalLiteral(), QVariant(false)).toBool(); QString classnames = plugininfo.value(classnamesLiteral()).toString(); + QStringList components = plugininfo.value(componentsLiteral()).toStringList(); + QStringList scripts = plugininfo.value(scriptsLiteral()).toStringList(); if (!linkTarget.isEmpty()) import.insert(linkTargetLiteral(), linkTarget); if (!plugins.isEmpty()) @@ -355,6 +369,14 @@ QVariantList findPathsForModuleImports(const QVariantList &imports) importsCopy.append(depImport); } } + if (!components.isEmpty()) { + components.removeDuplicates(); + import.insert(componentsLiteral(), components); + } + if (!scripts.isEmpty()) { + scripts.removeDuplicates(); + import.insert(scriptsLiteral(), scripts); + } } import.remove(versionLiteral()); done.append(import); @@ -585,8 +607,20 @@ QString generateCmakeIncludeFileContent(const QVariantList &importList) { const QMap<QString, QVariant> &importDict = importVariant.toMap(); for (auto it = importDict.cbegin(); it != importDict.cend(); ++it) { - s << it.key().toUpper() << QLatin1Char(';') - << it.value().toString() << QLatin1Char(';'); + s << it.key().toUpper() << QLatin1Char(';'); + // QVariant can implicitly convert QString to the QStringList with the single + // element, let's use this. + QStringList args = it.value().toStringList(); + if (args.isEmpty()) { + // This should not happen, but if it does, the result of the + // 'cmake_parse_arguments' call will be incorrect, so follow up semicolon + // indicates that the single-/multiarg option is empty. + s << QLatin1Char(';'); + } else { + for (auto arg : args) { + s << arg << QLatin1Char(';'); + } + } } s << QStringLiteral("\")\n"); ++importsCount; |