Clang: Move createJobRequest into Jobs

This simplifies the high level client ClangCodeModelServer and removes
quite some duplication in tests.

Change-Id: I4c6ab8646c8728990ebaca2b920ae514e949c54a
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Nikolai Kosjar
2017-05-04 12:43:38 +02:00
parent b091b20685
commit ac59e2be40
13 changed files with 107 additions and 171 deletions

View File

@@ -201,14 +201,14 @@ void ClangCodeModelServer::completeCode(const ClangBackEnd::CompleteCodeMessage
TIME_SCOPE_DURATION("ClangCodeModelServer::completeCode"); TIME_SCOPE_DURATION("ClangCodeModelServer::completeCode");
try { try {
auto document = documents.document(message.filePath(), message.projectPartId()); Document document = documents.document(message.filePath(), message.projectPartId());
DocumentProcessor processor = documentProcessors().processor(document);
JobRequest jobRequest = createJobRequest(document, JobRequest::Type::CompleteCode); JobRequest jobRequest = processor.createJobRequest(JobRequest::Type::CompleteCode);
jobRequest.line = message.line(); jobRequest.line = message.line();
jobRequest.column = message.column(); jobRequest.column = message.column();
jobRequest.ticketNumber = message.ticketNumber(); jobRequest.ticketNumber = message.ticketNumber();
DocumentProcessor processor = documentProcessors().processor(document);
processor.addJob(jobRequest); processor.addJob(jobRequest);
processor.process(); processor.process();
} catch (const std::exception &exception) { } catch (const std::exception &exception) {
@@ -224,11 +224,8 @@ void ClangCodeModelServer::requestDocumentAnnotations(const RequestDocumentAnnot
auto document = documents.document(message.fileContainer().filePath(), auto document = documents.document(message.fileContainer().filePath(),
message.fileContainer().projectPartId()); message.fileContainer().projectPartId());
const JobRequest jobRequest = createJobRequest(document,
JobRequest::Type::RequestDocumentAnnotations);
DocumentProcessor processor = documentProcessors().processor(document); DocumentProcessor processor = documentProcessors().processor(document);
processor.addJob(jobRequest); processor.addJob(JobRequest::Type::RequestDocumentAnnotations);
processor.process(); processor.process();
} catch (const std::exception &exception) { } catch (const std::exception &exception) {
qWarning() << "Error in ClangCodeModelServer::requestDocumentAnnotations:" << exception.what(); qWarning() << "Error in ClangCodeModelServer::requestDocumentAnnotations:" << exception.what();
@@ -294,9 +291,8 @@ void ClangCodeModelServer::addAndRunUpdateJobs(const std::vector<Document> &docu
{ {
for (const auto &document : documents) { for (const auto &document : documents) {
DocumentProcessor processor = documentProcessors().processor(document); DocumentProcessor processor = documentProcessors().processor(document);
processor.addJob(createJobRequest(document, processor.addJob(JobRequest::Type::UpdateDocumentAnnotations,
JobRequest::Type::UpdateDocumentAnnotations, PreferredTranslationUnit::PreviouslyParsed);
PreferredTranslationUnit::PreviouslyParsed));
processor.process(); processor.process();
} }
} }
@@ -320,15 +316,8 @@ void ClangCodeModelServer::processInitialJobsForDocuments(const std::vector<Docu
{ {
for (const auto &document : documents) { for (const auto &document : documents) {
DocumentProcessor processor = documentProcessors().create(document); DocumentProcessor processor = documentProcessors().create(document);
const auto jobRequestCreator = [this](const Document &document, processor.addJob(JobRequest::Type::UpdateDocumentAnnotations);
JobRequest::Type jobRequestType, processor.addJob(JobRequest::Type::CreateInitialDocumentPreamble);
PreferredTranslationUnit preferredTranslationUnit) {
return createJobRequest(document, jobRequestType, preferredTranslationUnit);
};
processor.setJobRequestCreator(jobRequestCreator);
processor.addJob(createJobRequest(document, JobRequest::Type::UpdateDocumentAnnotations));
processor.addJob(createJobRequest(document, JobRequest::Type::CreateInitialDocumentPreamble));
processor.process(); processor.process();
} }
} }
@@ -357,25 +346,6 @@ void ClangCodeModelServer::startInitializingSupportiveTranslationUnits(
} }
} }
JobRequest ClangCodeModelServer::createJobRequest(
const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = document.filePath();
jobRequest.projectPartId = document.projectPartId();
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.preferredTranslationUnit = preferredTranslationUnit;
const ProjectPart &projectPart = projects.project(document.projectPartId());
jobRequest.projectChangeTimePoint = projectPart.lastChangeTimePoint();
return jobRequest;
}
void ClangCodeModelServer::setUpdateDocumentAnnotationsTimeOutInMsForTestsOnly(int value) void ClangCodeModelServer::setUpdateDocumentAnnotationsTimeOutInMsForTestsOnly(int value)
{ {
updateDocumentAnnotationsTimeOutInMs = value; updateDocumentAnnotationsTimeOutInMs = value;

View File

@@ -82,11 +82,6 @@ private:
void addAndRunUpdateJobs(const std::vector<Document> &documents); void addAndRunUpdateJobs(const std::vector<Document> &documents);
JobRequest createJobRequest(const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit
= PreferredTranslationUnit::RecentlyParsed) const;
private: private:
ProjectParts projects; ProjectParts projects;
UnsavedFiles unsavedFiles; UnsavedFiles unsavedFiles;

View File

@@ -62,7 +62,6 @@ public:
Jobs jobs; Jobs jobs;
SupportiveTranslationUnitInitializer supportiveTranslationUnitInitializer; SupportiveTranslationUnitInitializer supportiveTranslationUnitInitializer;
JobRequestCreator jobRequestCreator;
}; };
DocumentProcessor::DocumentProcessor(const Document &document, DocumentProcessor::DocumentProcessor(const Document &document,
@@ -78,9 +77,11 @@ DocumentProcessor::DocumentProcessor(const Document &document,
{ {
} }
void DocumentProcessor::setJobRequestCreator(const JobRequestCreator &creator) JobRequest DocumentProcessor::createJobRequest(
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit) const
{ {
d->supportiveTranslationUnitInitializer.setJobRequestCreator(creator); return d->jobs.createJobRequest(d->document, type, preferredTranslationUnit);
} }
void DocumentProcessor::addJob(const JobRequest &jobRequest) void DocumentProcessor::addJob(const JobRequest &jobRequest)
@@ -88,6 +89,11 @@ void DocumentProcessor::addJob(const JobRequest &jobRequest)
d->jobs.add(jobRequest); d->jobs.add(jobRequest);
} }
void DocumentProcessor::addJob(JobRequest::Type type, PreferredTranslationUnit preferredTranslationUnit)
{
d->jobs.add(d->document, type, preferredTranslationUnit);
}
JobRequests DocumentProcessor::process() JobRequests DocumentProcessor::process()
{ {
return d->jobs.process(); return d->jobs.process();

View File

@@ -49,9 +49,15 @@ public:
ProjectParts &projects, ProjectParts &projects,
ClangCodeModelClientInterface &client); ClangCodeModelClientInterface &client);
void setJobRequestCreator(const JobRequestCreator &creator); JobRequest createJobRequest(JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit
= PreferredTranslationUnit::RecentlyParsed) const;
void addJob(const JobRequest &jobRequest); void addJob(const JobRequest &jobRequest);
void addJob(JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit
= PreferredTranslationUnit::RecentlyParsed);
JobRequests process(); JobRequests process();
Document document() const; Document document() const;

View File

@@ -93,9 +93,6 @@ public:
}; };
using JobRequests = QVector<JobRequest>; using JobRequests = QVector<JobRequest>;
using JobRequestCreator = std::function<JobRequest(const Document &,
JobRequest::Type ,
PreferredTranslationUnit)>;
QDebug operator<<(QDebug debug, const JobRequest &jobRequest); QDebug operator<<(QDebug debug, const JobRequest &jobRequest);

View File

@@ -25,7 +25,9 @@
#include "clangjobs.h" #include "clangjobs.h"
#include "clangdocument.h"
#include "clangiasyncjob.h" #include "clangiasyncjob.h"
#include "projects.h"
#include <QDebug> #include <QDebug>
#include <QFutureSynchronizer> #include <QFutureSynchronizer>
@@ -42,6 +44,7 @@ Jobs::Jobs(Documents &documents,
ClangCodeModelClientInterface &client) ClangCodeModelClientInterface &client)
: m_documents(documents) : m_documents(documents)
, m_unsavedFiles(unsavedFiles) , m_unsavedFiles(unsavedFiles)
, m_projectParts(projectParts)
, m_client(client) , m_client(client)
, m_queue(documents, projectParts) , m_queue(documents, projectParts)
{ {
@@ -66,11 +69,37 @@ Jobs::~Jobs()
delete asyncJob; delete asyncJob;
} }
JobRequest Jobs::createJobRequest(const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = document.filePath();
jobRequest.projectPartId = document.projectPartId();
jobRequest.unsavedFilesChangeTimePoint = m_unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.preferredTranslationUnit = preferredTranslationUnit;
const ProjectPart &projectPart = m_projectParts.project(document.projectPartId());
jobRequest.projectChangeTimePoint = projectPart.lastChangeTimePoint();
return jobRequest;
}
void Jobs::add(const JobRequest &job) void Jobs::add(const JobRequest &job)
{ {
m_queue.add(job); m_queue.add(job);
} }
void Jobs::add(const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit)
{
const JobRequest jobRequest = createJobRequest(document, type, preferredTranslationUnit);
m_queue.add(jobRequest);
}
JobRequests Jobs::process() JobRequests Jobs::process()
{ {
const JobRequests jobsToRun = m_queue.processQueue(); const JobRequests jobsToRun = m_queue.processQueue();

View File

@@ -59,7 +59,15 @@ public:
ClangCodeModelClientInterface &client); ClangCodeModelClientInterface &client);
~Jobs(); ~Jobs();
JobRequest createJobRequest(const Document &document, JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit
= PreferredTranslationUnit::RecentlyParsed) const;
void add(const JobRequest &job); void add(const JobRequest &job);
void add(const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit
= PreferredTranslationUnit::RecentlyParsed);
JobRequests process(); JobRequests process();
@@ -79,6 +87,7 @@ private:
private: private:
Documents &m_documents; Documents &m_documents;
UnsavedFiles &m_unsavedFiles; UnsavedFiles &m_unsavedFiles;
ProjectParts &m_projectParts;
ClangCodeModelClientInterface &m_client; ClangCodeModelClientInterface &m_client;
JobQueue m_queue; JobQueue m_queue;

View File

@@ -42,11 +42,6 @@ SupportiveTranslationUnitInitializer::SupportiveTranslationUnitInitializer(
{ {
} }
void SupportiveTranslationUnitInitializer::setJobRequestCreator(const JobRequestCreator &creator)
{
m_jobRequestCreator = creator;
}
void SupportiveTranslationUnitInitializer::setIsDocumentClosedChecker( void SupportiveTranslationUnitInitializer::setIsDocumentClosedChecker(
const IsDocumentClosedChecker &isDocumentClosedChecker) const IsDocumentClosedChecker &isDocumentClosedChecker)
{ {
@@ -124,11 +119,8 @@ bool SupportiveTranslationUnitInitializer::abortIfDocumentIsClosed()
void SupportiveTranslationUnitInitializer::addJob(JobRequest::Type jobRequestType) void SupportiveTranslationUnitInitializer::addJob(JobRequest::Type jobRequestType)
{ {
QTC_CHECK(m_jobRequestCreator); const JobRequest jobRequest = m_jobs.createJobRequest(
m_document, jobRequestType, PreferredTranslationUnit::LastUninitialized);
const JobRequest jobRequest = m_jobRequestCreator(m_document,
jobRequestType,
PreferredTranslationUnit::LastUninitialized);
m_jobs.add(jobRequest); m_jobs.add(jobRequest);
} }

View File

@@ -24,7 +24,6 @@
****************************************************************************/ ****************************************************************************/
#include "clangdocument.h" #include "clangdocument.h"
#include "clangjobrequest.h"
#include "clangjobs.h" #include "clangjobs.h"
#include <functional> #include <functional>
@@ -49,7 +48,6 @@ public:
public: public:
SupportiveTranslationUnitInitializer(const Document &document, Jobs &jobs); SupportiveTranslationUnitInitializer(const Document &document, Jobs &jobs);
void setJobRequestCreator(const JobRequestCreator &creator);
void setIsDocumentClosedChecker(const IsDocumentClosedChecker &isDocumentClosedChecker); void setIsDocumentClosedChecker(const IsDocumentClosedChecker &isDocumentClosedChecker);
State state() const; State state() const;
@@ -61,7 +59,6 @@ public: // for tests
void checkIfReparseJobFinished(const Jobs::RunningJob &job); void checkIfReparseJobFinished(const Jobs::RunningJob &job);
private: private:
bool abortIfDocumentIsClosed(); bool abortIfDocumentIsClosed();
void addJob(JobRequest::Type jobRequestType); void addJob(JobRequest::Type jobRequestType);
@@ -70,7 +67,6 @@ private:
Jobs &m_jobs; Jobs &m_jobs;
State m_state = State::NotInitialized; State m_state = State::NotInitialized;
JobRequestCreator m_jobRequestCreator;
IsDocumentClosedChecker m_isDocumentClosedChecker; IsDocumentClosedChecker m_isDocumentClosedChecker;
}; };

View File

@@ -44,17 +44,17 @@ using namespace ClangBackEnd;
namespace { namespace {
class DocumentProcessor : public ::testing::Test struct Data {
{ Data()
protected: {
void SetUp() override; projects.createOrUpdate({ProjectPartContainer(projectPartId)});
void TearDown() override;
ClangBackEnd::JobRequest createJobRequest(ClangBackEnd::JobRequest::Type type) const; const QVector<FileContainer> fileContainer{FileContainer(filePath, projectPartId)};
document = documents.create(fileContainer).front();
documents.setVisibleInEditors({filePath});
documents.setUsedByCurrentEditor(filePath);
}
bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const;
protected:
ClangBackEnd::ProjectParts projects; ClangBackEnd::ProjectParts projects;
ClangBackEnd::UnsavedFiles unsavedFiles; ClangBackEnd::UnsavedFiles unsavedFiles;
ClangBackEnd::Documents documents{projects, unsavedFiles}; ClangBackEnd::Documents documents{projects, unsavedFiles};
@@ -64,65 +64,60 @@ protected:
Utf8String filePath{Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")}; Utf8String filePath{Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")};
Utf8String projectPartId{Utf8StringLiteral("/path/to/projectfile")}; Utf8String projectPartId{Utf8StringLiteral("/path/to/projectfile")};
};
ClangBackEnd::DocumentProcessor documentProcessor{document, class DocumentProcessor : public ::testing::Test
documents, {
unsavedFiles, protected:
projects, void SetUp() override;
dummyIpcClient}; void TearDown() override;
protected:
std::unique_ptr<Data> d;
std::unique_ptr<ClangBackEnd::DocumentProcessor> documentProcessor;
bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const;
}; };
using DocumentProcessorSlowTest = DocumentProcessor; using DocumentProcessorSlowTest = DocumentProcessor;
TEST_F(DocumentProcessor, ProcessEmpty) TEST_F(DocumentProcessor, ProcessEmpty)
{ {
const JobRequests jobsStarted = documentProcessor.process(); const JobRequests jobsStarted = documentProcessor->process();
ASSERT_THAT(jobsStarted.size(), 0); ASSERT_THAT(jobsStarted.size(), 0);
} }
TEST_F(DocumentProcessorSlowTest, ProcessSingleJob) TEST_F(DocumentProcessorSlowTest, ProcessSingleJob)
{ {
const JobRequest jobRequest = createJobRequest(JobRequest::Type::UpdateDocumentAnnotations); const JobRequest jobRequest
documentProcessor.addJob(jobRequest); = documentProcessor->createJobRequest(JobRequest::Type::UpdateDocumentAnnotations);
documentProcessor->addJob(jobRequest);
const JobRequests jobsStarted = documentProcessor.process(); const JobRequests jobsStarted = documentProcessor->process();
ASSERT_THAT(jobsStarted.size(), 1); ASSERT_THAT(jobsStarted.size(), 1);
} }
void DocumentProcessor::SetUp() void DocumentProcessor::SetUp()
{ {
projects.createOrUpdate({ProjectPartContainer(projectPartId)}); d.reset(new Data);
documentProcessor.reset(new ClangBackEnd::DocumentProcessor(d->document,
const QVector<FileContainer> fileContainer{FileContainer(filePath, projectPartId)}; d->documents,
document = documents.create(fileContainer).front(); d->unsavedFiles,
documents.setVisibleInEditors({filePath}); d->projects,
documents.setUsedByCurrentEditor(filePath); d->dummyIpcClient));
} }
void DocumentProcessor::TearDown() void DocumentProcessor::TearDown()
{ {
ASSERT_TRUE(waitUntilAllJobsFinished()); // QFuture/QFutureWatcher is implemented with events ASSERT_TRUE(waitUntilAllJobsFinished()); // QFuture/QFutureWatcher is implemented with events
} d.reset();
JobRequest DocumentProcessor::createJobRequest(JobRequest::Type type) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = filePath;
jobRequest.projectPartId = projectPartId;
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.projectChangeTimePoint = projects.project(projectPartId).lastChangeTimePoint();
return jobRequest;
} }
bool DocumentProcessor::waitUntilAllJobsFinished(int timeOutInMs) const bool DocumentProcessor::waitUntilAllJobsFinished(int timeOutInMs) const
{ {
const auto noJobsRunningAnymore = [this](){ return documentProcessor.runningJobs().isEmpty(); }; const auto noJobsRunningAnymore = [this](){ return documentProcessor->runningJobs().isEmpty(); };
return ProcessEventUtilities::processEventsUntilTrue(noJobsRunningAnymore, timeOutInMs); return ProcessEventUtilities::processEventsUntilTrue(noJobsRunningAnymore, timeOutInMs);
} }

View File

@@ -54,8 +54,6 @@ protected:
void SetUp() override; void SetUp() override;
void TearDown() override; void TearDown() override;
ClangBackEnd::JobRequest createJobRequest(ClangBackEnd::JobRequest::Type type) const;
bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const; bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const;
protected: protected:
@@ -149,8 +147,7 @@ TEST_F(DocumentProcessors, ProcessEmpty)
TEST_F(DocumentProcessorsSlowTest, ProcessSingle) TEST_F(DocumentProcessorsSlowTest, ProcessSingle)
{ {
DocumentProcessor documentProcessor = documentProcessors.create(document); DocumentProcessor documentProcessor = documentProcessors.create(document);
const JobRequest jobRequest = createJobRequest(JobRequest::Type::UpdateDocumentAnnotations); documentProcessor.addJob(JobRequest::Type::UpdateDocumentAnnotations);
documentProcessor.addJob(jobRequest);
const JobRequests jobsStarted = documentProcessors.process(); const JobRequests jobsStarted = documentProcessors.process();
@@ -172,20 +169,6 @@ void DocumentProcessors::TearDown()
ASSERT_TRUE(waitUntilAllJobsFinished()); // QFuture/QFutureWatcher is implemented with events ASSERT_TRUE(waitUntilAllJobsFinished()); // QFuture/QFutureWatcher is implemented with events
} }
JobRequest DocumentProcessors::createJobRequest(JobRequest::Type type) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = filePath;
jobRequest.projectPartId = projectPartId;
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.projectChangeTimePoint = projects.project(projectPartId).lastChangeTimePoint();
return jobRequest;
}
bool DocumentProcessors::waitUntilAllJobsFinished(int timeOutInMs) const bool DocumentProcessors::waitUntilAllJobsFinished(int timeOutInMs) const
{ {
const auto noJobsRunningAnymore = [this](){ return documentProcessors.runningJobs().isEmpty(); }; const auto noJobsRunningAnymore = [this](){ return documentProcessors.runningJobs().isEmpty(); };

View File

@@ -58,9 +58,6 @@ protected:
bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const; bool waitUntilAllJobsFinished(int timeOutInMs = 10000) const;
bool waitUntilJobChainFinished(int timeOutInMs = 10000) const; bool waitUntilJobChainFinished(int timeOutInMs = 10000) const;
JobRequest createJobRequest(const Utf8String &filePath,
JobRequest::Type type) const;
protected: protected:
ClangBackEnd::ProjectParts projects; ClangBackEnd::ProjectParts projects;
ClangBackEnd::UnsavedFiles unsavedFiles; ClangBackEnd::UnsavedFiles unsavedFiles;
@@ -86,7 +83,7 @@ TEST_F(Jobs, ProcessEmptyQueue)
TEST_F(JobsSlowTest, ProcessQueueWithSingleJob) TEST_F(JobsSlowTest, ProcessQueueWithSingleJob)
{ {
jobs.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations)); jobs.add(document, JobRequest::Type::UpdateDocumentAnnotations);
const JobRequests jobsStarted = jobs.process(); const JobRequests jobsStarted = jobs.process();
@@ -96,9 +93,9 @@ TEST_F(JobsSlowTest, ProcessQueueWithSingleJob)
TEST_F(JobsSlowTest, ProcessQueueUntilEmpty) TEST_F(JobsSlowTest, ProcessQueueUntilEmpty)
{ {
jobs.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations)); jobs.add(document, JobRequest::Type::UpdateDocumentAnnotations);
jobs.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations)); jobs.add(document, JobRequest::Type::UpdateDocumentAnnotations);
jobs.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations)); jobs.add(document, JobRequest::Type::UpdateDocumentAnnotations);
jobs.process(); jobs.process();
@@ -107,7 +104,7 @@ TEST_F(JobsSlowTest, ProcessQueueUntilEmpty)
TEST_F(JobsSlowTest, IsJobRunning) TEST_F(JobsSlowTest, IsJobRunning)
{ {
jobs.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations)); jobs.add(document, JobRequest::Type::UpdateDocumentAnnotations);
jobs.process(); jobs.process();
const bool isJobRunning = jobs.isJobRunningForTranslationUnit(document.translationUnit().id()); const bool isJobRunning = jobs.isJobRunningForTranslationUnit(document.translationUnit().id());
@@ -146,19 +143,4 @@ bool Jobs::waitUntilJobChainFinished(int timeOutInMs) const
return ProcessEventUtilities::processEventsUntilTrue(noJobsRunningAnymore, timeOutInMs); return ProcessEventUtilities::processEventsUntilTrue(noJobsRunningAnymore, timeOutInMs);
} }
JobRequest Jobs::createJobRequest(const Utf8String &filePath,
JobRequest::Type type) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = filePath;
jobRequest.projectPartId = projectPartId;
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.projectChangeTimePoint = projects.project(projectPartId).lastChangeTimePoint();
return jobRequest;
}
} // anonymous } // anonymous

View File

@@ -65,32 +65,8 @@ public:
const Utf8String &projectPartId) { const Utf8String &projectPartId) {
return !documents.hasDocument(filePath, projectPartId); return !documents.hasDocument(filePath, projectPartId);
}; };
const auto jobRequestCreator = [this](const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit) {
return createJobRequest(document, type, preferredTranslationUnit);
};
initializer.reset(new ClangBackEnd::SupportiveTranslationUnitInitializer{document, jobs}); initializer.reset(new ClangBackEnd::SupportiveTranslationUnitInitializer{document, jobs});
initializer->setIsDocumentClosedChecker(isDocumentClosed); initializer->setIsDocumentClosedChecker(isDocumentClosed);
initializer->setJobRequestCreator(jobRequestCreator);
}
JobRequest createJobRequest(const Document &document,
JobRequest::Type type,
PreferredTranslationUnit preferredTranslationUnit) const
{
JobRequest jobRequest;
jobRequest.type = type;
jobRequest.requirements = JobRequest::requirementsForType(type);
jobRequest.filePath = document.filePath();
jobRequest.projectPartId = document.projectPartId();
jobRequest.unsavedFilesChangeTimePoint = unsavedFiles.lastChangeTimePoint();
jobRequest.documentRevision = document.documentRevision();
jobRequest.preferredTranslationUnit = preferredTranslationUnit;
const ProjectPart &projectPart = projects.project(document.projectPartId());
jobRequest.projectChangeTimePoint = projectPart.lastChangeTimePoint();
return jobRequest;
} }
public: public:
@@ -234,9 +210,9 @@ void SupportiveTranslationUnitInitializer::parse()
Jobs::RunningJob SupportiveTranslationUnitInitializer::createRunningJob(JobRequest::Type type) const Jobs::RunningJob SupportiveTranslationUnitInitializer::createRunningJob(JobRequest::Type type) const
{ {
const JobRequest jobRequest = d.createJobRequest(document, const JobRequest jobRequest = jobs.createJobRequest(document,
type, type,
PreferredTranslationUnit::LastUninitialized); PreferredTranslationUnit::LastUninitialized);
return Jobs::RunningJob{jobRequest, Utf8String(), QFuture<void>()}; return Jobs::RunningJob{jobRequest, Utf8String(), QFuture<void>()};
} }