From bb28b13d51648a51244e49e30426cd6ca9ac3e08 Mon Sep 17 00:00:00 2001 From: Marco Benelli Date: Wed, 16 Sep 2015 14:02:00 +0200 Subject: 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 --- tools/qmlimportscanner/main.cpp | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'tools') 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 #include +#include 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; } -- cgit v1.2.3