Clang: Don't add non existing files to the file system watcher

Change-Id: I210bb19576cc1b7a6639487f868bcf20065c73b5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2015-09-30 15:16:18 +02:00
parent 514efee682
commit 1a0c618ef2

View File

@@ -34,6 +34,7 @@
#include <utf8stringvector.h> #include <utf8stringvector.h>
#include <QFileInfo>
#include <QStringList> #include <QStringList>
#include <algorithm> #include <algorithm>
@@ -45,11 +46,27 @@ namespace {
QStringList toStringList(const QSet<Utf8String> &files) QStringList toStringList(const QSet<Utf8String> &files)
{ {
QStringList resultList; QStringList resultList;
resultList.reserve(files.size());
std::copy(files.cbegin(), files.cend(), std::back_inserter(resultList)); std::copy(files.cbegin(), files.cend(), std::back_inserter(resultList));
return resultList; return resultList;
} }
QStringList filterExistingFiles(QStringList &&filePaths)
{
auto fileExists = [] (const QString &filePath) {
return QFileInfo::exists(filePath);
};
auto startOfNonExistingFilePaths = std::partition(filePaths.begin(),
filePaths.end(),
fileExists);
filePaths.erase(startOfNonExistingFilePaths, filePaths.end());
return filePaths;
}
} }
ClangFileSystemWatcher::ClangFileSystemWatcher(TranslationUnits &translationUnits) ClangFileSystemWatcher::ClangFileSystemWatcher(TranslationUnits &translationUnits)
@@ -63,7 +80,10 @@ ClangFileSystemWatcher::ClangFileSystemWatcher(TranslationUnits &translationUnit
void ClangFileSystemWatcher::addFiles(const QSet<Utf8String> &filePaths) void ClangFileSystemWatcher::addFiles(const QSet<Utf8String> &filePaths)
{ {
watcher.addPaths(toStringList(filePaths)); const auto existingFiles = filterExistingFiles(toStringList(filePaths));
if (!existingFiles.isEmpty())
watcher.addPaths(existingFiles);
} }
void ClangFileSystemWatcher::updateTranslationUnitsWithChangedDependencies(const QString &filePath) void ClangFileSystemWatcher::updateTranslationUnitsWithChangedDependencies(const QString &filePath)