forked from qt-creator/qt-creator
Clang: Introduce DocumentParsed as job requirement
This is in prepration for a follow-up change, which introduces a state where the Document is not yet parsed (it was reset) but the queue has jobs. All jobs get this requirement except those that generate an AST. Change-Id: Ifcbb704e54108b40797180514c5ad3f3768ef10b Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -247,6 +247,12 @@ bool JobQueue::areRunConditionsMet(const JobRequest &request, const Document &do
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conditions.testFlag(Condition::DocumentParsed)
|
||||||
|
&& !document.translationUnits().hasParsedTranslationUnit()) {
|
||||||
|
qCDebugJobs() << "Not choosing due to not yet parsed translation unit:" << request;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,9 @@ static JobRequest::RunConditions conditionsForType(JobRequest::Type type)
|
|||||||
if (type == Type::RequestReferences)
|
if (type == Type::RequestReferences)
|
||||||
conditions |= Condition::CurrentDocumentRevision;
|
conditions |= Condition::CurrentDocumentRevision;
|
||||||
|
|
||||||
|
if (type != Type::UpdateDocumentAnnotations && type != Type::ParseSupportiveTranslationUnit)
|
||||||
|
conditions |= Condition::DocumentParsed;
|
||||||
|
|
||||||
return conditions;
|
return conditions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ public:
|
|||||||
DocumentNotVisible = 1 << 2,
|
DocumentNotVisible = 1 << 2,
|
||||||
DocumentSuspended = 1 << 3,
|
DocumentSuspended = 1 << 3,
|
||||||
DocumentUnsuspended = 1 << 4,
|
DocumentUnsuspended = 1 << 4,
|
||||||
CurrentDocumentRevision = 1 << 5,
|
DocumentParsed = 1 << 5,
|
||||||
|
CurrentDocumentRevision = 1 << 6,
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(RunConditions, RunCondition)
|
Q_DECLARE_FLAGS(RunConditions, RunCondition)
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,13 @@ bool TranslationUnits::areAllTranslationUnitsParsed() const
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TranslationUnits::hasParsedTranslationUnit() const
|
||||||
|
{
|
||||||
|
return Utils::anyOf(m_units, [](const TranslationUnitDataPtr &unit) {
|
||||||
|
return unit->parseTimePoint != TimePoint();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
int TranslationUnits::size() const
|
int TranslationUnits::size() const
|
||||||
{
|
{
|
||||||
return m_units.size();
|
return m_units.size();
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public:
|
|||||||
void updateParseTimePoint(const Utf8String &translationUnitId, TimePoint timePoint);
|
void updateParseTimePoint(const Utf8String &translationUnitId, TimePoint timePoint);
|
||||||
|
|
||||||
bool areAllTranslationUnitsParsed() const;
|
bool areAllTranslationUnitsParsed() const;
|
||||||
|
bool hasParsedTranslationUnit() const;
|
||||||
|
|
||||||
public: // for tests
|
public: // for tests
|
||||||
int size() const;
|
int size() const;
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ protected:
|
|||||||
PreferredTranslationUnit preferredTranslationUnit
|
PreferredTranslationUnit preferredTranslationUnit
|
||||||
= PreferredTranslationUnit::RecentlyParsed) const;
|
= PreferredTranslationUnit::RecentlyParsed) const;
|
||||||
|
|
||||||
|
void pretendParsedTranslationUnit();
|
||||||
|
|
||||||
void updateDocumentRevision();
|
void updateDocumentRevision();
|
||||||
void updateUnsavedFiles();
|
void updateUnsavedFiles();
|
||||||
void updateProject();
|
void updateProject();
|
||||||
@@ -173,7 +175,7 @@ TEST_F(JobQueue, ProcessSingleJob)
|
|||||||
TEST_F(JobQueue, ProcessUntilEmpty)
|
TEST_F(JobQueue, ProcessUntilEmpty)
|
||||||
{
|
{
|
||||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations));
|
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations));
|
||||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::CreateInitialDocumentPreamble));
|
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::ParseSupportiveTranslationUnit));
|
||||||
|
|
||||||
JobRequests jobsToRun;
|
JobRequests jobsToRun;
|
||||||
ASSERT_THAT(jobQueue.size(), Eq(2));
|
ASSERT_THAT(jobQueue.size(), Eq(2));
|
||||||
@@ -421,6 +423,7 @@ TEST_F(JobQueue, RequestCompleteCodeOutdatableByDocumentClose)
|
|||||||
|
|
||||||
TEST_F(JobQueue, RequestCompleteCodeNotOutdatableByUnsavedFilesChange)
|
TEST_F(JobQueue, RequestCompleteCodeNotOutdatableByUnsavedFilesChange)
|
||||||
{
|
{
|
||||||
|
pretendParsedTranslationUnit();
|
||||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::CompleteCode));
|
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::CompleteCode));
|
||||||
updateUnsavedFiles();
|
updateUnsavedFiles();
|
||||||
|
|
||||||
@@ -431,6 +434,7 @@ TEST_F(JobQueue, RequestCompleteCodeNotOutdatableByUnsavedFilesChange)
|
|||||||
|
|
||||||
TEST_F(JobQueue, RequestCompleteCodeNotOutdatableByDocumentRevisionChange)
|
TEST_F(JobQueue, RequestCompleteCodeNotOutdatableByDocumentRevisionChange)
|
||||||
{
|
{
|
||||||
|
pretendParsedTranslationUnit();
|
||||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::CompleteCode));
|
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::CompleteCode));
|
||||||
updateDocumentRevision();
|
updateDocumentRevision();
|
||||||
|
|
||||||
@@ -461,6 +465,7 @@ TEST_F(JobQueue, RequestCompleteCodeOutdatableByDocumentRevisionChange)
|
|||||||
|
|
||||||
TEST_F(JobQueue, RequestReferencesRunsForCurrentDocumentRevision)
|
TEST_F(JobQueue, RequestReferencesRunsForCurrentDocumentRevision)
|
||||||
{
|
{
|
||||||
|
pretendParsedTranslationUnit();
|
||||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::RequestReferences));
|
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::RequestReferences));
|
||||||
|
|
||||||
const JobRequests jobsToStart = jobQueue.processQueue();
|
const JobRequests jobsToStart = jobQueue.processQueue();
|
||||||
@@ -549,6 +554,11 @@ JobRequest JobQueue::createJobRequest(
|
|||||||
return jobRequest;
|
return jobRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JobQueue::pretendParsedTranslationUnit()
|
||||||
|
{
|
||||||
|
document.translationUnits().updateParseTimePoint(document.translationUnit().id(), Clock::now());
|
||||||
|
}
|
||||||
|
|
||||||
void JobQueue::updateDocumentRevision()
|
void JobQueue::updateDocumentRevision()
|
||||||
{
|
{
|
||||||
documents.update({FileContainer(filePath1, projectPartId, Utf8String(), true, 1)});
|
documents.update({FileContainer(filePath1, projectPartId, Utf8String(), true, 1)});
|
||||||
|
|||||||
Reference in New Issue
Block a user