diff --git a/src/tools/clangbackend/ipcsource/clangdocument.cpp b/src/tools/clangbackend/ipcsource/clangdocument.cpp index 2d4d1eac7fa..3e9b6971abf 100644 --- a/src/tools/clangbackend/ipcsource/clangdocument.cpp +++ b/src/tools/clangbackend/ipcsource/clangdocument.cpp @@ -301,15 +301,15 @@ void Document::incorporateUpdaterResult(const TranslationUnitUpdateResult &resul return; } - if (result.parseTimePointIsSet) + if (result.hasParsed()) d->lastProjectPartChangeTimePoint = result.parseTimePoint; - if (result.parseTimePointIsSet || result.reparsed) + if (result.hasParsed() || result.hasReparsed()) d->dependedFilePaths = result.dependedOnFilePaths; d->documents.addWatchedFiles(d->dependedFilePaths); - if (result.reparsed + if (result.hasReparsed() && result.needsToBeReparsedChangeTimePoint == d->needsToBeReparsedChangeTimePoint) { d->needsToBeReparsed = false; } diff --git a/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.cpp b/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.cpp index 7e010f078d0..51e34dc53c8 100644 --- a/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.cpp +++ b/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.cpp @@ -122,7 +122,7 @@ void TranslationUnitUpdater::createTranslationUnitIfNeeded() if (parseWasSuccessful()) { updateIncludeFilePaths(); - updateLastProjectPartChangeTimePoint(); + m_out.parseTimePoint = std::chrono::steady_clock::now(); } else { qWarning() << "Parsing" << m_in.filePath << "failed:" << errorCodeToText(m_parseErrorCode); @@ -151,7 +151,7 @@ void TranslationUnitUpdater::reparse() if (reparseWasSuccessful()) { updateIncludeFilePaths(); - m_out.reparsed = true; + m_out.reparseTimePoint = std::chrono::steady_clock::now(); m_out.needsToBeReparsedChangeTimePoint = m_in.needsToBeReparsedChangeTimePoint; } else { qWarning() << "Reparsing" << m_in.filePath << "failed:" << m_reparseErrorCode; @@ -185,12 +185,6 @@ void TranslationUnitUpdater::createIndexIfNeeded() } } -void TranslationUnitUpdater::updateLastProjectPartChangeTimePoint() -{ - m_out.parseTimePointIsSet = true; - m_out.parseTimePoint = std::chrono::steady_clock::now(); -} - void TranslationUnitUpdater::includeCallback(CXFile included_file, CXSourceLocation *, unsigned, CXClientData clientData) diff --git a/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.h b/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.h index cb7a06b7f6e..6802daf7eb6 100644 --- a/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.h +++ b/src/tools/clangbackend/ipcsource/clangtranslationunitupdater.h @@ -55,14 +55,19 @@ public: }; class TranslationUnitUpdateResult { +public: + bool hasParsed() const + { return parseTimePoint != time_point(); } + + bool hasReparsed() const + { return reparseTimePoint != time_point(); } + public: bool hasParseOrReparseFailed = false; - bool parseTimePointIsSet = false; time_point parseTimePoint; - + time_point reparseTimePoint; time_point needsToBeReparsedChangeTimePoint; - bool reparsed = false; QSet dependedOnFilePaths; }; @@ -93,8 +98,6 @@ private: void recreateAndParseIfNeeded(); void reparse(); - void updateLastProjectPartChangeTimePoint(); - void updateIncludeFilePaths(); static void includeCallback(CXFile included_file, CXSourceLocation *, diff --git a/tests/unit/unittest/clangdocument-test.cpp b/tests/unit/unittest/clangdocument-test.cpp index 86cf8a43635..010964fb2fd 100644 --- a/tests/unit/unittest/clangdocument-test.cpp +++ b/tests/unit/unittest/clangdocument-test.cpp @@ -330,7 +330,7 @@ TEST_F(Document, IncorporateUpdaterResultResetsDirtyness) { document.setDirtyIfDependencyIsMet(document.filePath()); TranslationUnitUpdateResult result; - result.reparsed = true; + result.reparseTimePoint = std::chrono::steady_clock::now(); result.needsToBeReparsedChangeTimePoint = document.isNeededReparseChangeTimePoint(); document.incorporateUpdaterResult(result); @@ -341,7 +341,7 @@ TEST_F(Document, IncorporateUpdaterResultResetsDirtyness) TEST_F(Document, IncorporateUpdaterResultDoesNotResetDirtynessIfItWasChanged) { TranslationUnitUpdateResult result; - result.reparsed = true; + result.reparseTimePoint = std::chrono::steady_clock::now(); result.needsToBeReparsedChangeTimePoint = std::chrono::steady_clock::now(); document.setDirtyIfDependencyIsMet(document.filePath()); diff --git a/tests/unit/unittest/translationunitupdater-test.cpp b/tests/unit/unittest/translationunitupdater-test.cpp index c96b53d9eda..40ca8909713 100644 --- a/tests/unit/unittest/translationunitupdater-test.cpp +++ b/tests/unit/unittest/translationunitupdater-test.cpp @@ -61,7 +61,7 @@ TEST_F(TranslationUnitUpdater, ParsesIfNeeded) TranslationUnitUpdateResult result = updater.update(::TranslationUnitUpdater::UpdateMode::AsNeeded); ASSERT_TRUE(cxTranslationUnit); - ASSERT_FALSE(result.reparsed); + ASSERT_FALSE(result.hasReparsed()); } TEST_F(TranslationUnitUpdater, ReparsesIfNeeded) @@ -70,7 +70,7 @@ TEST_F(TranslationUnitUpdater, ReparsesIfNeeded) TranslationUnitUpdateResult result = updater.update(::TranslationUnitUpdater::UpdateMode::AsNeeded); - ASSERT_TRUE(result.reparsed); + ASSERT_TRUE(result.hasReparsed()); } TEST_F(TranslationUnitUpdater, UpdatesParseTimePoint) @@ -80,7 +80,7 @@ TEST_F(TranslationUnitUpdater, UpdatesParseTimePoint) TranslationUnitUpdateResult result = updater.update(::TranslationUnitUpdater::UpdateMode::AsNeeded); - ASSERT_TRUE(result.parseTimePointIsSet); + ASSERT_TRUE(result.hasParsed()); ASSERT_THAT(result.parseTimePoint, Gt(now)); } @@ -92,8 +92,8 @@ TEST_F(TranslationUnitUpdater, NotUpdatingParseTimePointForReparseOnly) ::TranslationUnitUpdater reparseUpdater = createUpdater(createInput(SetReparseNeeded)); result = reparseUpdater.update(::TranslationUnitUpdater::UpdateMode::AsNeeded); - ASSERT_TRUE(result.reparsed); - ASSERT_FALSE(result.parseTimePointIsSet); + ASSERT_TRUE(result.hasReparsed()); + ASSERT_FALSE(result.hasParsed()); } TEST_F(TranslationUnitUpdater, UpdatesDependendOnFilesOnParse)