summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cppeditor/cppeditor.cpp11
-rw-r--r--src/shared/cplusplus/Symbol.cpp19
-rw-r--r--src/shared/cplusplus/Symbol.h4
3 files changed, 28 insertions, 6 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index a5c5ffb38e..4673e18e05 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 da677aa3b2..8f5dc3b492 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 ea49529e74..d7c70c38ae 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;