From 942f5a708adae178d445c68cf63956ef12f3df56 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 4 Mar 2009 15:45:38 +0100 Subject: [PATCH] Ignore the symbol's column for generated symbols (at least for now). --- src/plugins/cppeditor/cppeditor.cpp | 11 +++++++++-- src/shared/cplusplus/Symbol.cpp | 19 +++++++++++++++---- src/shared/cplusplus/Symbol.h | 4 ++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index a5c5ffb38e2..4673e18e05f 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -137,7 +137,7 @@ protected: } // end of anonymous namespace -QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &context) +static QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &context) { Name *symbolName = s->name(); if (! symbolName) @@ -433,12 +433,18 @@ void CPPEditor::updateMethodBoxIndex() if (file()->fileName() != symbol->fileName()) continue; + else if (symbol->isGenerated()) + continue; + if (symbol) { int column = symbol->column(); if (column != 0) --column; + if (symbol->isGenerated()) + column = 0; + QTextCursor c(document()->findBlockByNumber(symbol->line() - 1)); c.setPosition(c.position() + column); @@ -969,7 +975,8 @@ bool CPPEditor::openEditorAt(Symbol *s) if (column) --column; #else - unsigned column = 0; + if (s->isGenerated()) + unsigned column = 0; #endif return openCppEditorAt(fileName, s->line(), column); diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index da677aa3b21..8f5dc3b4921 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -164,7 +164,8 @@ Symbol::Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, Name * _visibility(Symbol::Public), _scope(0), _index(0), - _next(0) + _next(0), + _isGenerated(false) { setSourceLocation(sourceLocation); setName(name); @@ -200,14 +201,24 @@ unsigned Symbol::sourceLocation() const unsigned Symbol::sourceOffset() const { return _sourceOffset; } +bool Symbol::isGenerated() const +{ return _isGenerated; } + void Symbol::setSourceLocation(unsigned sourceLocation) { _sourceLocation = sourceLocation; - if (_sourceLocation) - _sourceOffset = translationUnit()->tokenAt(sourceLocation).offset; - else + if (! _sourceLocation) { + _isGenerated = false; _sourceOffset = 0; + } else { + TranslationUnit *unit = translationUnit(); + + const Token &tk = unit->tokenAt(sourceLocation); + + _isGenerated = tk.generated; + _sourceOffset = tk.offset; + } } unsigned Symbol::line() const diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index ea49529e74d..d7c70c38ae7 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -233,6 +233,8 @@ public: Name *identity() const; + bool isGenerated() const; + void setScope(Scope *scope); // ### make me private void setSourceLocation(unsigned sourceLocation); // ### make me private @@ -256,6 +258,8 @@ private: unsigned _index; Symbol *_next; + bool _isGenerated: 1; + class IdentityForName; class HashCode; -- GitLab