diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 49b09c3aca88f4215abd15f2de43c9c291459751..49209bc1131476bd6836f677b30a796c586c4886 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 486d6d7706ce2d22d977290f558df4d03f140d35..4984ef114a474bf292e1113b4f1fe192f11a3791 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 b561467db17f5ab60dd7c886e4e9d8c65f0602d1..59c68c2f5b30851f4cdc66e9a70a6c9101446a73 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 ddec563a094a39cbe9a61cb676f4259967ee447f..8fa991fc8ffadac10f4741337b807c2a0afe7ea4 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;