From 2a0f901e16faa4838a0bd09f7d41dc46256589ff Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 25 May 2010 10:47:49 +0200
Subject: [PATCH] Use the document in the snapshot when available.

---
 src/libs/cplusplus/CheckUndefinedSymbols.cpp |  6 +++---
 src/libs/cplusplus/CheckUndefinedSymbols.h   |  2 +-
 src/plugins/cppeditor/cppeditor.cpp          | 21 ++++++++++++++------
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
index 77d18f371bb..eba07d4b882 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
@@ -42,10 +42,10 @@
 
 using namespace CPlusPlus;
 
-CheckUndefinedSymbols::CheckUndefinedSymbols(Document::Ptr doc, const Snapshot &snapshot)
-    : ASTVisitor(doc->translationUnit()), _context(doc, snapshot)
+CheckUndefinedSymbols::CheckUndefinedSymbols(TranslationUnit *unit, const LookupContext &context)
+    : ASTVisitor(unit), _context(context)
 {
-    _fileName = doc->fileName();
+    _fileName = context.thisDocument()->fileName();
 }
 
 CheckUndefinedSymbols::~CheckUndefinedSymbols()
diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.h b/src/libs/cplusplus/CheckUndefinedSymbols.h
index 4d5172fa748..58f0edd1d90 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.h
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.h
@@ -39,7 +39,7 @@ namespace CPlusPlus {
 class CPLUSPLUS_EXPORT CheckUndefinedSymbols: protected ASTVisitor
 {
 public:
-    CheckUndefinedSymbols(Document::Ptr doc, const Snapshot &snapshot);
+    CheckUndefinedSymbols(TranslationUnit *unit, const LookupContext &context);
     virtual ~CheckUndefinedSymbols();
 
     QList<Document::DiagnosticMessage> operator()(AST *ast);
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index f070d24aa64..adbec6ce8e8 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1997,15 +1997,24 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source)
     }
 
     if (! doc) {
-        const QByteArray preprocessedCode = source.snapshot.preprocessedCode(source.code, source.fileName);
-
         snapshot = source.snapshot;
-        doc = source.snapshot.documentFromSource(preprocessedCode, source.fileName);
+        const QByteArray preprocessedCode = snapshot.preprocessedCode(source.code, source.fileName);
+
+        doc = snapshot.documentFromSource(preprocessedCode, source.fileName);
         doc->check();
 
-        // ### check undefined symbols.
-        CheckUndefinedSymbols checkUndefinedSymbols(doc, snapshot);
-        diagnosticMessages = checkUndefinedSymbols(doc->translationUnit()->ast());
+        Document::Ptr documentInSnapshot = snapshot.document(source.fileName);
+        if (! documentInSnapshot) {
+            // use the newly parsed document.
+            documentInSnapshot = doc;
+        }
+
+        LookupContext context(doc, snapshot);
+
+        if (TranslationUnit *unit = doc->translationUnit()) {
+            CheckUndefinedSymbols checkUndefinedSymbols(unit, context);
+            diagnosticMessages = checkUndefinedSymbols(unit->ast());
+        }
     }
 
     TranslationUnit *translationUnit = doc->translationUnit();
-- 
GitLab