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