diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index f0b14d1ad63..4f3bb3fdf71 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -134,6 +134,27 @@ void FindUsages::reportResult(unsigned tokenIndex, const QList &cand reportResult(tokenIndex); } +QString FindUsages::matchingLine(const Token &tk) const +{ + const char *beg = _source.constData(); + const char *cp = beg + tk.offset; + for (; cp != beg - 1; --cp) { + if (*cp == '\n') + break; + } + + ++cp; + + const char *lineEnd = cp + 1; + for (; *lineEnd; ++lineEnd) { + if (*lineEnd == '\n') + break; + } + + const QString matchingLine = QString::fromUtf8(cp, lineEnd - cp); + return matchingLine; +} + void FindUsages::reportResult(unsigned tokenIndex) { const Token &tk = tokenAt(tokenIndex); @@ -146,7 +167,12 @@ void FindUsages::reportResult(unsigned tokenIndex) unsigned line, col; getTokenStartPosition(tokenIndex, &line, &col); - const QString lineText = QString::fromUtf8(_originalSource.split('\n').at(line - 1)); + QString lineText; + QList lines = _originalSource.split('\n'); + if (lines.size() < ((int) line - 1)) + lineText = matchingLine(tk); + else + lineText = QString::fromUtf8(lines.at(line - 1)); if (col) --col; // adjust the column position. diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h index 599357d20c5..7bf87a7c03f 100644 --- a/src/libs/cplusplus/FindUsages.h +++ b/src/libs/cplusplus/FindUsages.h @@ -75,6 +75,8 @@ protected: Scope *switchScope(Scope *scope); + QString matchingLine(const Token &tk) const; + void reportResult(unsigned tokenIndex, const Name *name, Scope *scope = 0); void reportResult(unsigned tokenIndex, const Identifier *id, Scope *scope = 0); void reportResult(unsigned tokenIndex, const QList &candidates);