forked from qt-creator/qt-creator
Clang: Reparse for removed files too
Change-Id: Ibe8a3fa46bead6018a4279c3a270cb2535a7b296 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user