Clang: Filter duplicates in clang query output

Because we can visit headers many times, we get results many times too.

Change-Id: I3bbe7d7a5d01c2580a4569bfe115f14a69edc8a7
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2017-07-03 11:53:47 +02:00
parent 07c3a37054
commit 23cae9a9e0
17 changed files with 347 additions and 23 deletions

View File

@@ -34,6 +34,7 @@ ClangQueryGatherer::ClangQueryGatherer(StringCache<Utils::PathString, std::mutex
std::vector<V2::FileContainer> &&unsaved,
Utils::SmallString &&query)
: m_filePathCache(filePathCache),
m_sourceRangeFilter(sources.size()),
m_sources(std::move(sources)),
m_unsaved(std::move(unsaved)),
m_query(std::move(query))
@@ -125,7 +126,7 @@ std::vector<SourceRangesAndDiagnosticsForQueryMessage> ClangQueryGatherer::allCu
std::vector<SourceRangesAndDiagnosticsForQueryMessage> messages;
for (Future &future : m_sourceFutures)
messages.push_back(future.get());
messages.push_back(m_sourceRangeFilter.removeDuplicates(future.get()));
return messages;
}
@@ -135,7 +136,7 @@ std::vector<SourceRangesAndDiagnosticsForQueryMessage> ClangQueryGatherer::finis
std::vector<SourceRangesAndDiagnosticsForQueryMessage> messages;
for (auto &&future : finishedFutures())
messages.push_back(future.get());
messages.push_back(m_sourceRangeFilter.removeDuplicates(future.get()));
return messages;
}