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)