diff options
author | Marco Benelli <marco.benelli@theqtcompany.com> | 2015-09-16 14:02:00 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@theqtcompany.com> | 2015-10-19 06:46:05 +0000 |
commit | bb28b13d51648a51244e49e30426cd6ca9ac3e08 (patch) | |
tree | 31b3d188bf46f9e6751bed67a4bb7e836ebccbc1 /tools | |
parent | dd8f370cfa996c8ebb42120f808bf89b402ed141 (diff) |
Skip designer-related directories while scanning imports.
The qtcreator's qmldesigner plugin contains some directories that are
not reacheable during the import scan, resulting in qmlplugindump
complaing for missing dependencies.
Since these components are not needed, let the scanner just ignore
them.
Change-Id: Icdf7c9e841cf5bcc1e737a0fc75a63b1e02f87f9
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 395c31a710..56cca8fcb4 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -54,6 +54,7 @@ #include <QtCore/QLibraryInfo> #include <iostream> +#include <algorithm> QT_USE_NAMESPACE @@ -343,10 +344,35 @@ QVariantList findQmlImportsInDirectory(const QString &qmlDir) if (qmlDir.isEmpty()) return ret; - QDirIterator iterator(qmlDir, QDirIterator::Subdirectories); + QDirIterator iterator(qmlDir, QDir::AllDirs | QDir::NoDotDot, QDirIterator::Subdirectories); + QStringList blacklist; + struct isMetainfo { + bool operator() (const QFileInfo &x) const { + return x.suffix() == QLatin1String("metainfo"); + } + }; + struct pathStartsWith { + pathStartsWith(const QString &path) : _path(path) {} + bool operator() (const QString &x) const { + return _path.startsWith(x); + } + const QString _path; + }; + + while (iterator.hasNext()) { iterator.next(); - QString path = iterator.filePath(); + const QString path = iterator.filePath(); + const QFileInfoList entries = QDir(path).entryInfoList(); + + // Skip designer related stuff + if (std::find_if(entries.cbegin(), entries.cend(), isMetainfo()) != entries.cend()) { + blacklist << path; + continue; + } + + if (std::find_if(blacklist.cbegin(), blacklist.cend(), pathStartsWith(path)) != blacklist.cend()) + continue; // skip obvious build output directories if (path.contains(QStringLiteral("Debug-iphoneos")) || path.contains(QStringLiteral("Release-iphoneos")) || @@ -358,8 +384,9 @@ QVariantList findQmlImportsInDirectory(const QString &qmlDir) continue; } - QVariantList imports = findQmlImportsInFile(path); - ret = mergeImports(ret, imports); + foreach (const QFileInfo &x, entries) + if (x.isFile()) + ret = mergeImports(ret, findQmlImportsInFile(x.absoluteFilePath())); } return ret; } |