Clang: Reparse for removed files too

Change-Id: Ibe8a3fa46bead6018a4279c3a270cb2535a7b296
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2015-08-31 13:10:28 +02:00
parent 053e9597af
commit 8ad7616420
4 changed files with 55 additions and 15 deletions

View File

@@ -62,7 +62,7 @@ void TranslationUnits::createOrUpdate(const QVector<FileContainer> &fileContaine
{
for (const FileContainer &fileContainer : fileContainers) {
createOrUpdateTranslationUnit(fileContainer);
updateTranslationUnitsWithChangedDependencies(fileContainer.filePath());
updateTranslationUnitsWithChangedDependency(fileContainer.filePath());
}
}
@@ -82,17 +82,8 @@ void TranslationUnits::remove(const QVector<FileContainer> &fileContainers)
{
checkIfProjectPartsExists(fileContainers);
QVector<FileContainer> processedFileContainers = fileContainers;
auto removeBeginIterator = std::remove_if(translationUnits_.begin(), translationUnits_.end(), [&processedFileContainers] (const TranslationUnit &translationUnit) {
return removeFromFileContainer(processedFileContainers, translationUnit);
});
translationUnits_.erase(removeBeginIterator, translationUnits_.end());
if (!processedFileContainers.isEmpty())
throw TranslationUnitDoesNotExistException(processedFileContainers.first());
removeTranslationUnits(fileContainers);
updateTranslationUnitsWithChangedDependencies(fileContainers);
}
const TranslationUnit &TranslationUnits::translationUnit(const Utf8String &filePath, const Utf8String &projectPartId) const
@@ -127,12 +118,18 @@ void TranslationUnits::addWatchedFiles(QSet<Utf8String> &filePaths)
fileSystemWatcher.addFiles(filePaths);
}
void TranslationUnits::updateTranslationUnitsWithChangedDependencies(const Utf8String &filePath)
void TranslationUnits::updateTranslationUnitsWithChangedDependency(const Utf8String &filePath)
{
for (auto &translationUnit : translationUnits_)
translationUnit.setDirtyIfDependencyIsMet(filePath);
}
void TranslationUnits::updateTranslationUnitsWithChangedDependencies(const QVector<FileContainer> &fileContainers)
{
for (const FileContainer &fileContainer : fileContainers)
updateTranslationUnitsWithChangedDependency(fileContainer.filePath());
}
void TranslationUnits::sendChangedDiagnostics()
{
for (const auto &translationUnit : translationUnits_) {
@@ -228,5 +225,19 @@ void TranslationUnits::sendDiagnosticChangedMessage(const TranslationUnit &trans
}
}
void TranslationUnits::removeTranslationUnits(const QVector<FileContainer> &fileContainers)
{
QVector<FileContainer> processedFileContainers = fileContainers;
auto removeBeginIterator = std::remove_if(translationUnits_.begin(), translationUnits_.end(), [&processedFileContainers] (const TranslationUnit &translationUnit) {
return removeFromFileContainer(processedFileContainers, translationUnit);
});
translationUnits_.erase(removeBeginIterator, translationUnits_.end());
if (!processedFileContainers.isEmpty())
throw TranslationUnitDoesNotExistException(processedFileContainers.first());
}
} // namespace ClangBackEnd