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