forked from qt-creator/qt-creator
ClangPchManager: Improve handling of no include in project PCH
We were doing simply nothing but we should call PchCreator::doInMainThreadAfterFinished(). Change-Id: Ia21d2cf4af53121d9e401f6e9a5b432a4daed00f Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -113,8 +113,11 @@ Utils::SmallStringVector PchCreator::generateClangCompilerArguments(const PchTas
|
||||
void PchCreator::generatePch(PchTask &&pchTask)
|
||||
{
|
||||
m_projectPartPch.projectPartId = pchTask.projectPartId();
|
||||
|
||||
m_projectPartPch.lastModified = QDateTime::currentSecsSinceEpoch();
|
||||
|
||||
if (pchTask.includes.empty())
|
||||
return;
|
||||
|
||||
auto content = generatePchIncludeFileContent(pchTask.includes);
|
||||
auto pchOutputPath = generatePchFilePath();
|
||||
|
||||
|
@@ -33,6 +33,8 @@
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace ClangBackEnd {
|
||||
|
||||
void PchTaskQueue::addPchTasks(PchTasks &&newPchTasks, PchTasks &destination)
|
||||
@@ -145,7 +147,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createProjectTasks(PchTasks &&pchT
|
||||
auto convert = [this](auto &&pchTask) {
|
||||
return [pchTask = std::move(pchTask), this](PchCreatorInterface &pchCreator) mutable {
|
||||
const auto projectPartId = pchTask.projectPartId();
|
||||
if (pchTask.includes.size()) {
|
||||
pchTask.systemPchPath = m_precompiledHeaderStorage.fetchSystemPrecompiledHeaderPath(
|
||||
projectPartId);
|
||||
pchTask.preIncludeSearchPath = m_environment.preIncludeSearchPath();
|
||||
@@ -157,9 +158,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createProjectTasks(PchTasks &&pchT
|
||||
m_precompiledHeaderStorage.insertProjectPrecompiledHeader(
|
||||
projectPartId, projectPartPch.pchPath, projectPartPch.lastModified);
|
||||
}
|
||||
} else {
|
||||
m_precompiledHeaderStorage.deleteProjectPrecompiledHeader(projectPartId);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -179,7 +177,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createSystemTasks(PchTasks &&pchTa
|
||||
auto convert = [this](auto &&pchTask) {
|
||||
return [pchTask = std::move(pchTask), this](PchCreatorInterface &pchCreator) mutable {
|
||||
const auto projectPartIds = pchTask.projectPartIds;
|
||||
if (pchTask.includes.size()) {
|
||||
pchTask.preIncludeSearchPath = m_environment.preIncludeSearchPath();
|
||||
pchCreator.generatePch(std::move(pchTask));
|
||||
const auto &projectPartPch = pchCreator.projectPartPch();
|
||||
@@ -189,9 +186,6 @@ std::vector<PchTaskQueue::Task> PchTaskQueue::createSystemTasks(PchTasks &&pchTa
|
||||
m_precompiledHeaderStorage.insertSystemPrecompiledHeaders(
|
||||
projectPartIds, projectPartPch.pchPath, projectPartPch.lastModified);
|
||||
}
|
||||
} else {
|
||||
m_precompiledHeaderStorage.deleteSystemPrecompiledHeaders(projectPartIds);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -315,6 +315,36 @@ TEST_F(PchCreatorVerySlowTest, FaultyProjectPartPchForCreatesFaultyPchForPchTask
|
||||
Field(&ProjectPartPch::lastModified, Gt(0))));
|
||||
}
|
||||
|
||||
TEST_F(PchCreatorSlowTest, NoIncludes)
|
||||
{
|
||||
pchTask1.includes = {};
|
||||
|
||||
creator.generatePch(std::move(pchTask1));
|
||||
|
||||
ASSERT_THAT(creator.projectPartPch(),
|
||||
AllOf(Field(&ProjectPartPch::projectPartId, Eq(pchTask1.projectPartId())),
|
||||
Field(&ProjectPartPch::pchPath, IsEmpty()),
|
||||
Field(&ProjectPartPch::lastModified, Gt(0))));
|
||||
}
|
||||
|
||||
TEST_F(PchCreatorSlowTest, NoIncludesInTheMainThreadCalls)
|
||||
{
|
||||
pchTask1.includes = {};
|
||||
creator.generatePch(std::move(pchTask1));
|
||||
|
||||
EXPECT_CALL(mockPchManagerClient,
|
||||
precompiledHeadersUpdated(
|
||||
Field(&ClangBackEnd::PrecompiledHeadersUpdatedMessage::projectPartIds,
|
||||
ElementsAre(Eq(creator.projectPartPch().projectPartId)))));
|
||||
EXPECT_CALL(mockClangPathWatcher,
|
||||
updateIdPaths(
|
||||
ElementsAre(AllOf(Field(&ClangBackEnd::IdPaths::id, 1),
|
||||
Field(&ClangBackEnd::IdPaths::filePathIds, IsEmpty())))));
|
||||
EXPECT_CALL(mockBuildDependenciesStorage, updatePchCreationTimeStamp(Gt(0), Eq(1)));
|
||||
|
||||
creator.doInMainThreadAfterFinished();
|
||||
}
|
||||
|
||||
TEST_F(PchCreatorVerySlowTest, GeneratedFile)
|
||||
{
|
||||
creator.clear();
|
||||
|
Reference in New Issue
Block a user