From 1a0c618ef2e402bc28496cedcce36ee70c3f0b25 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 30 Sep 2015 15:16:18 +0200 Subject: [PATCH] Clang: Don't add non existing files to the file system watcher Change-Id: I210bb19576cc1b7a6639487f868bcf20065c73b5 Reviewed-by: Nikolai Kosjar --- .../ipcsource/clangfilesystemwatcher.cpp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp index 371bae062f0..4088e4cfac8 100644 --- a/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp +++ b/src/tools/clangbackend/ipcsource/clangfilesystemwatcher.cpp @@ -34,6 +34,7 @@ #include +#include #include #include @@ -45,11 +46,27 @@ namespace { QStringList toStringList(const QSet &files) { QStringList resultList; + resultList.reserve(files.size()); std::copy(files.cbegin(), files.cend(), std::back_inserter(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) @@ -63,7 +80,10 @@ ClangFileSystemWatcher::ClangFileSystemWatcher(TranslationUnits &translationUnit void ClangFileSystemWatcher::addFiles(const QSet &filePaths) { - watcher.addPaths(toStringList(filePaths)); + const auto existingFiles = filterExistingFiles(toStringList(filePaths)); + + if (!existingFiles.isEmpty()) + watcher.addPaths(existingFiles); } void ClangFileSystemWatcher::updateTranslationUnitsWithChangedDependencies(const QString &filePath)