diff --git a/src/tools/clangbackend/ipcsource/clangdocument.cpp b/src/tools/clangbackend/ipcsource/clangdocument.cpp
index a4f95d17b84e2f34c81caad3666f9ce09cc732ee..cbbaf51b3328eb12630381e434c0eba7e676cd98 100644
--- a/src/tools/clangbackend/ipcsource/clangdocument.cpp
+++ b/src/tools/clangbackend/ipcsource/clangdocument.cpp
@@ -150,6 +150,11 @@ bool Document::isIntact() const
         && !d->hasParseOrReparseFailed;
 }
 
+bool Document::isParsed() const
+{
+    return d->translationUnits.areAllTranslationUnitsParsed();
+}
+
 Utf8String Document::filePath() const
 {
     checkIfNull();
diff --git a/src/tools/clangbackend/ipcsource/clangdocument.h b/src/tools/clangbackend/ipcsource/clangdocument.h
index 260705c135400f510ca5454dcdb0a9d5eab2d76a..415deefbe9d6b8f2a91708bdf614513ed1fbf388 100644
--- a/src/tools/clangbackend/ipcsource/clangdocument.h
+++ b/src/tools/clangbackend/ipcsource/clangdocument.h
@@ -77,6 +77,7 @@ public:
 
     bool isNull() const;
     bool isIntact() const;
+    bool isParsed() const;
 
     Utf8String filePath() const;
     Utf8StringVector fileArguments() const;
diff --git a/src/tools/clangbackend/ipcsource/clangdocumentsuspenderresumer.cpp b/src/tools/clangbackend/ipcsource/clangdocumentsuspenderresumer.cpp
index 8edde48fd6292af389ad875c773732e2c7640fcf..bae9889318713039111a4adc62fb15b24f93af43 100644
--- a/src/tools/clangbackend/ipcsource/clangdocumentsuspenderresumer.cpp
+++ b/src/tools/clangbackend/ipcsource/clangdocumentsuspenderresumer.cpp
@@ -97,7 +97,8 @@ static bool isSuspendable(const Document &document)
 {
     return isFineDocument(document)
         && !document.isSuspended()
-        && !document.isVisibleInEditor();
+        && !document.isVisibleInEditor()
+        && document.isParsed();
 }
 
 static bool isResumable(const Document &document)
diff --git a/tests/unit/unittest/clangdocumentsuspenderresumer-test.cpp b/tests/unit/unittest/clangdocumentsuspenderresumer-test.cpp
index 8ab78ebded67095b465174b3d97cb9719e9bc5ee..823a84482caa7bc55a371c60f37ddca929e91c76 100644
--- a/tests/unit/unittest/clangdocumentsuspenderresumer-test.cpp
+++ b/tests/unit/unittest/clangdocumentsuspenderresumer-test.cpp
@@ -73,6 +73,7 @@ protected:
     Document getDocument(const Utf8String &filePath);
     void categorizeDocuments(int hotDocumentsSize);
     SuspendResumeJobs createSuspendResumeJobs(int hotDocumentsSize = -1);
+    static void setParsed(Document &document);
 
 protected:
     ClangBackEnd::ProjectParts projects;
@@ -176,6 +177,8 @@ TEST_F(DocumentSuspenderResumer, CreateSuspendJobForInvisible)
     Document document = documents.create({fileContainer1})[0];
     document.setIsSuspended(false);
     document.setIsVisibleInEditor(false, Clock::now());
+    setParsed(document);
+
     const SuspendResumeJobs expectedJobs = {
         {document, JobRequest::Type::SuspendDocument, PreferredTranslationUnit::RecentlyParsed}
     };
@@ -196,12 +199,24 @@ TEST_F(DocumentSuspenderResumer, DoNotCreateSuspendJobForVisible)
     ASSERT_THAT(jobs, ContainerEq(SuspendResumeJobs()));
 }
 
+TEST_F(DocumentSuspenderResumer, DoNotCreateSuspendJobForUnparsed)
+{
+    Document document = documents.create({fileContainer1})[0];
+    document.setIsSuspended(false);
+    document.setIsVisibleInEditor(true, Clock::now());
+
+    const SuspendResumeJobs jobs = createSuspendResumeJobs(/*hotDocumentsSize=*/ 0);
+
+    ASSERT_THAT(jobs, ContainerEq(SuspendResumeJobs()));
+}
+
 TEST_F(DocumentSuspenderResumer, CreateSuspendJobsForDocumentWithSupportiveTranslationUnit)
 {
     Document document = documents.create({fileContainer1})[0];
     document.setIsSuspended(false);
     document.setIsVisibleInEditor(false, Clock::now());
     document.translationUnits().createAndAppend(); // Add supportive translation unit
+    setParsed(document);
     const SuspendResumeJobs expectedJobs = {
         {document, JobRequest::Type::SuspendDocument, PreferredTranslationUnit::RecentlyParsed},
         {document, JobRequest::Type::SuspendDocument, PreferredTranslationUnit::PreviouslyParsed},
@@ -258,6 +273,7 @@ TEST_F(DocumentSuspenderResumer, CreateSuspendAndResumeJobs)
     Document hotDocument = documents.create({fileContainer1})[0];
     hotDocument.setIsSuspended(true);
     Document coldDocument = documents.create({fileContainer2})[0];
+    setParsed(coldDocument);
     coldDocument.setIsSuspended(false);
     documents.setVisibleInEditors({filePath1});
     const SuspendResumeJobs expectedJobs = {
@@ -292,4 +308,15 @@ DocumentSuspenderResumer::createSuspendResumeJobs(int hotDocumentsSize)
     return ClangBackEnd::createSuspendResumeJobs(documents.documents(), hotDocumentsSize);
 }
 
+void DocumentSuspenderResumer::setParsed(ClangBackEnd::Document &document)
+{
+    const Utf8String first = document.translationUnit().id();
+    document.translationUnits().updateParseTimePoint(first, Clock::now());
+
+    const Utf8String second
+            = document.translationUnit(PreferredTranslationUnit::LastUninitialized).id();
+    if (second != first)
+        document.translationUnits().updateParseTimePoint(second, Clock::now());
+}
+
 } // anonymous