From fd4dbd74462627efc33bde499bd2a81665c0213c Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 10 Jul 2009 11:59:01 +0200
Subject: [PATCH] Introduced Snapshot::simplified(doc)

---
 src/libs/cplusplus/CppDocument.cpp  | 22 ++++++++++++++++++++++
 src/libs/cplusplus/CppDocument.h    |  5 +++++
 src/plugins/cppeditor/cppeditor.cpp |  2 ++
 src/plugins/cppeditor/cppeditor.h   |  1 +
 4 files changed, 30 insertions(+)

diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 49b09c3aca8..49209bc1131 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -386,3 +386,25 @@ QSharedPointer<NamespaceBinding> Snapshot::globalNamespaceBinding(Document::Ptr
 {
     return CPlusPlus::bind(doc, *this);
 }
+
+Snapshot Snapshot::simplified(Document::Ptr doc) const
+{
+    Snapshot snapshot;
+    simplified_helper(doc, &snapshot);
+    return snapshot;
+}
+
+void Snapshot::simplified_helper(Document::Ptr doc, Snapshot *snapshot) const
+{
+    if (! doc)
+        return;
+
+    if (! snapshot->contains(doc->fileName())) {
+        snapshot->insert(doc);
+
+        foreach (const Document::Include &incl, doc->includes()) {
+            Document::Ptr includedDoc = value(incl.fileName());
+            simplified_helper(includedDoc, snapshot);
+        }
+    }
+}
diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h
index 486d6d7706c..4984ef114a4 100644
--- a/src/libs/cplusplus/CppDocument.h
+++ b/src/libs/cplusplus/CppDocument.h
@@ -277,6 +277,8 @@ public:
     Snapshot();
     ~Snapshot();
 
+    Snapshot simplified(Document::Ptr doc) const;
+
     QByteArray preprocessedCode(const QString &source,
                                 const QString &fileName) const;
 
@@ -288,6 +290,9 @@ public:
     void insert(Document::Ptr doc);
 
     using _Base::insert;
+
+private:
+    void simplified_helper(Document::Ptr doc, Snapshot *snapshot) const;
 };
 
 } // end of namespace CPlusPlus
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index b561467db17..59c68c2f5b3 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1727,6 +1727,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) const
 {
     const QByteArray preprocessedCode = source.snapshot.preprocessedCode(source.code, source.fileName);
     Document::Ptr doc = source.snapshot.documentFromSource(preprocessedCode, source.fileName);
+    const Snapshot snapshot = source.snapshot.simplified(doc);
     doc->check();
 
     Control *control = doc->control();
@@ -1741,6 +1742,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) const
 
     SemanticInfo semanticInfo;
     semanticInfo.revision = source.revision;
+    semanticInfo.snapshot = snapshot;
     semanticInfo.doc = doc;
     semanticInfo.localUses = useTable.localUses;
     semanticInfo.externalUses = useTable.externalUses;
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index ddec563a094..8fa991fc8ff 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -88,6 +88,7 @@ public:
     { }
 
     int revision;
+    CPlusPlus::Snapshot snapshot;
     CPlusPlus::Document::Ptr doc;
     LocalUseMap localUses;
     ExternalUseMap externalUses;
-- 
GitLab