forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(); };
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user