ClangPchManager: Don't watch generated files

Task-number: QTCREATORBUG-21983
Change-Id: I80af39278140c48c8740c83af85596d3ee9bf2da
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Marco Bubke
2019-02-14 13:29:21 +01:00
parent 3154002fb6
commit 2bd0c7c276
3 changed files with 23 additions and 8 deletions

View File

@@ -138,6 +138,16 @@ const ProjectPartPch &PchCreator::projectPartPch()
void PchCreator::setUnsavedFiles(const V2::FileContainers &fileContainers)
{
m_generatedFilePathIds.clear();
m_generatedFilePathIds.reserve(fileContainers.size());
std::transform(fileContainers.begin(),
fileContainers.end(),
std::back_inserter(m_generatedFilePathIds),
[&](const V2::FileContainer &fileContainer) {
return m_filePathCache.filePathId(fileContainer.filePath);
});
std::sort(m_generatedFilePathIds.begin(), m_generatedFilePathIds.end());
m_clangTool.addUnsavedFiles(fileContainers);
}
@@ -159,7 +169,14 @@ void PchCreator::clear()
void PchCreator::doInMainThreadAfterFinished()
{
m_clangPathwatcher.updateIdPaths({{m_projectPartPch.projectPartId, m_allInclues}});
FilePathIds existingIncludes;
existingIncludes.reserve(m_allInclues.size());
std::set_difference(m_allInclues.begin(),
m_allInclues.end(),
m_generatedFilePathIds.begin(),
m_generatedFilePathIds.end(),
std::back_inserter(existingIncludes));
m_clangPathwatcher.updateIdPaths({{m_projectPartPch.projectPartId, existingIncludes}});
m_pchManagerClient.precompiledHeadersUpdated(ProjectPartPchs{m_projectPartPch});
}

View File

@@ -98,6 +98,7 @@ private:
ProjectPartPch m_projectPartPch;
FilePathCaching m_filePathCache;
FilePathIds m_allInclues;
FilePathIds m_generatedFilePathIds;
Environment &m_environment;
PchManagerClientInterface &m_pchManagerClient;
ClangPathWatcherInterface &m_clangPathwatcher;

View File

@@ -78,10 +78,7 @@ MATCHER_P2(HasIdAndType,
class PchCreator: public ::testing::Test
{
protected:
PchCreator()
{
creator.setUnsavedFiles({generatedFile});
}
PchCreator() { creator.setUnsavedFiles({generatedFile}); }
ClangBackEnd::FilePathId id(ClangBackEnd::FilePathView path)
{
@@ -95,10 +92,9 @@ protected:
FilePath main2Path = TESTDATA_DIR "/builddependencycollector/project/main2.cpp";
FilePath header1Path = TESTDATA_DIR "/builddependencycollector/project/header1.h";
FilePath header2Path = TESTDATA_DIR "/builddependencycollector/project/header2.h";
Utils::SmallStringView generatedFileName = "builddependencycollector/project/generated_file.h";
FilePath generatedFilePath = TESTDATA_DIR "/builddependencycollector/project/generated_file.h";
TestEnvironment environment;
FileContainer generatedFile{{TESTDATA_DIR, generatedFileName}, "#pragma once", {}};
FileContainer generatedFile{generatedFilePath.clone(), "#pragma once", {}};
NiceMock<MockPchManagerClient> mockPchManagerClient;
NiceMock<MockClangPathWatcher> mockClangPathWatcher;
ClangBackEnd::PchCreator creator{environment, database, mockPchManagerClient, mockClangPathWatcher};
@@ -107,7 +103,8 @@ protected:
{id(TESTDATA_DIR "/builddependencycollector/project/header2.h"),
id(TESTDATA_DIR "/builddependencycollector/external/external1.h"),
id(TESTDATA_DIR "/builddependencycollector/external/external2.h")},
{id(TESTDATA_DIR "/builddependencycollector/project/header2.h"),
{id(generatedFilePath),
id(TESTDATA_DIR "/builddependencycollector/project/header2.h"),
id(TESTDATA_DIR "/builddependencycollector/external/external1.h"),
id(TESTDATA_DIR "/builddependencycollector/external/external2.h")},
{},