From b260bf1e733cb812ad14b99244a8aa6996bbd3b7 Mon Sep 17 00:00:00 2001 From: Leandro Melo Date: Fri, 8 Jul 2011 13:49:22 +0200 Subject: [PATCH] C++ editor: Fix follow symbol for member functions Fix a regression introduced by ad53fa42b03cb7f3237bd81c4bd92f462d8ec9da in which follow symbol takes you to the function declaration (instead of to the type) for situations like the one below (the | indicates the cursor): void Ty|pe::function() {} Change-Id: Iffd15b23bb0cd67eca5965cb22d9b60c4d024fb7 Reviewed-on: http://codereview.qt.nokia.com/1375 Reviewed-by: Erik Verbruggen --- src/plugins/cppeditor/cppeditor.cpp | 41 ++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index cda9444739..b1da326f2f 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1363,34 +1363,37 @@ CPPEditorWidget::Link CPPEditorWidget::findLinkAt(const QTextCursor &cursor, if (!m_modelManager) return link; - const Snapshot snapshot = m_modelManager->snapshot(); + const Snapshot &snapshot = m_modelManager->snapshot(); + Document::Ptr doc = m_lastSemanticInfo.doc; + if (!doc) { + doc = snapshot.document(file()->fileName()); + if (!doc) + return link; + } - if (m_lastSemanticInfo.doc){ - Link l = attemptFuncDeclDef(cursor, m_lastSemanticInfo.doc, snapshot); - if (l.isValid()) { - return l; + QTextCursor tc = cursor; + QChar ch = characterAt(tc.position()); + while (ch.isLetterOrNumber() || ch == QLatin1Char('_')) { + tc.movePosition(QTextCursor::NextCharacter); + ch = characterAt(tc.position()); + } + + if (doc->translationUnit() && doc->translationUnit()->ast()) { + int pos = tc.position(); + while (characterAt(pos).isSpace()) + ++pos; + if (characterAt(pos) == QLatin1Char('(')) { + link = attemptFuncDeclDef(cursor, doc, snapshot); + if (link.isValid()) + return link; } } int lineNumber = 0, positionInBlock = 0; convertPosition(cursor.position(), &lineNumber, &positionInBlock); - Document::Ptr doc = snapshot.document(file()->fileName()); - if (!doc) - return link; - const unsigned line = lineNumber; const unsigned column = positionInBlock + 1; - QTextCursor tc = cursor; - - // Make sure we're not at the start of a word - { - const QChar c = characterAt(tc.position()); - if (c.isLetter() || c == QLatin1Char('_')) - tc.movePosition(QTextCursor::Right); - } - - int beginOfToken = 0; int endOfToken = 0; -- 2.11.0