From 8356d3360b37acb840431158e8b058ef0058dd46 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Wed, 30 Sep 2009 16:13:43 +0200
Subject: [PATCH] Delay the parsing of the document.

---
 src/libs/cplusplus/CppDocument.cpp             | 4 +++-
 src/plugins/cpptools/cppsemanticsearch.cpp     | 1 +
 src/plugins/cpptools/cpptoolseditorsupport.cpp | 2 ++
 src/shared/cplusplus/TranslationUnit.cpp       | 2 ++
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 675cf6edf91..4d86c52d742 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -390,6 +390,9 @@ void Document::check(CheckMode mode)
 {
     Q_ASSERT(!_globalNamespace);
 
+    if (! isParsed())
+        parse();
+
     Semantic semantic(_control);
     if (mode == FastCheck)
         semantic.setSkipFunctionBodies(true);
@@ -450,7 +453,6 @@ Document::Ptr Snapshot::documentFromSource(const QByteArray &preprocessedCode,
     }
 
     newDoc->setSource(preprocessedCode);
-    newDoc->parse();
     return newDoc;
 }
 
diff --git a/src/plugins/cpptools/cppsemanticsearch.cpp b/src/plugins/cpptools/cppsemanticsearch.cpp
index 808f060b58d..554290e4785 100644
--- a/src/plugins/cpptools/cppsemanticsearch.cpp
+++ b/src/plugins/cpptools/cppsemanticsearch.cpp
@@ -288,6 +288,7 @@ static void semanticSearch_helper(QFutureInterface<Core::Utils::FileSearchResult
         }
 
         Document::Ptr newDoc = snapshot.documentFromSource(source, fileName);
+        newDoc->parse();
 
         if (SemanticSearch *search = factory->create(future, newDoc, snapshot)) {
             search->setSource(source);
diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp
index 09ab7f15f07..12148820258 100644
--- a/src/plugins/cpptools/cpptoolseditorsupport.cpp
+++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp
@@ -412,6 +412,8 @@ void CppEditorSupport::checkDocumentNow()
     const QByteArray preprocessedCode = snapshot.preprocessedCode(plainText, fileName);
 
     if (Document::Ptr doc = snapshot.documentFromSource(preprocessedCode, fileName)) {
+        doc->parse();
+
         CheckDocument checkDocument(doc, snapshot);
         QList<QuickFixOperationPtr> quickFixes = checkDocument(ed->textCursor());
         if (! quickFixes.isEmpty()) {
diff --git a/src/shared/cplusplus/TranslationUnit.cpp b/src/shared/cplusplus/TranslationUnit.cpp
index 053f76f2af1..b661bf26a04 100644
--- a/src/shared/cplusplus/TranslationUnit.cpp
+++ b/src/shared/cplusplus/TranslationUnit.cpp
@@ -255,6 +255,8 @@ bool TranslationUnit::parse(ParseMode mode)
     if (! isTokenized())
         tokenize();
 
+    f._parsed = true;
+
     Parser parser(this);
     parser.setQtMocRunEnabled(f._qtMocRunEnabled);
     parser.setObjCEnabled(f._objCEnabled);
-- 
GitLab