From 97c6671ea8938dd803554050be592c78b6c95036 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Fri, 9 Oct 2009 11:33:31 +0200 Subject: [PATCH] Mark the usages of a symbol using the semantic highlighter. --- src/plugins/cppeditor/cppeditor.cpp | 67 +++++++++++++++-------------- src/plugins/cppeditor/cppeditor.h | 1 + 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index d8401f06e4d..d4fc1bf645d 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -737,6 +737,9 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor, Document::Ptr doc, const Snapshot &snapshot) const { + if (! doc) + return 0; + QTextCursor tc = cursor; int line, col; convertPosition(tc.position(), &line, &col); @@ -768,16 +771,10 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor, void CPPEditor::findUsages() -{ - updateSemanticInfo(m_semanticHighlighter->semanticInfo(currentSource())); - - SemanticInfo info = m_lastSemanticInfo; - - if (! info.doc) - return; - - if (Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot)) +{ + if (Symbol *canonicalSymbol = markSymbols()) { m_modelManager->findUsages(canonicalSymbol); + } } void CPPEditor::renameUsages() @@ -790,7 +787,15 @@ void CPPEditor::renameUsages() void CPPEditor::renameUsagesNow() { - Core::EditorManager::instance()->hideEditorInfoBar(QLatin1String("CppEditor.Rename")); + if (Symbol *canonicalSymbol = markSymbols()) { + Core::EditorManager::instance()->hideEditorInfoBar(QLatin1String("CppEditor.Rename")); + m_modelManager->renameUsages(canonicalSymbol); + } +} + +Symbol *CPPEditor::markSymbols() +{ + updateSemanticInfo(m_semanticHighlighter->semanticInfo(currentSource())); m_currentRenameSelection = -1; @@ -798,35 +803,33 @@ void CPPEditor::renameUsagesNow() SemanticInfo info = m_lastSemanticInfo; - if (info.doc) { - if (Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot)) { - TranslationUnit *unit = info.doc->translationUnit(); - - const QList<int> references = m_modelManager->references(canonicalSymbol, info.doc, info.snapshot); - foreach (int index, references) { - unsigned line, column; - unit->getTokenPosition(index, &line, &column); + Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot); + if (canonicalSymbol) { + TranslationUnit *unit = info.doc->translationUnit(); - if (column) - --column; // adjust the column position. + const QList<int> references = m_modelManager->references(canonicalSymbol, info.doc, info.snapshot); + foreach (int index, references) { + unsigned line, column; + unit->getTokenPosition(index, &line, &column); - const int len = unit->tokenAt(index).f.length; + if (column) + --column; // adjust the column position. - QTextCursor cursor(document()->findBlockByNumber(line - 1)); - cursor.setPosition(cursor.position() + column); - cursor.setPosition(cursor.position() + len, QTextCursor::KeepAnchor); + const int len = unit->tokenAt(index).f.length; - QTextEdit::ExtraSelection sel; - sel.format = m_occurrencesFormat; - sel.cursor = cursor; - selections.append(sel); - } - - setExtraSelections(CodeSemanticsSelection, selections); + QTextCursor cursor(document()->findBlockByNumber(line - 1)); + cursor.setPosition(cursor.position() + column); + cursor.setPosition(cursor.position() + len, QTextCursor::KeepAnchor); - m_modelManager->renameUsages(canonicalSymbol); + QTextEdit::ExtraSelection sel; + sel.format = m_occurrencesFormat; + sel.cursor = cursor; + selections.append(sel); } } + + setExtraSelections(CodeSemanticsSelection, selections); + return canonicalSymbol; } void CPPEditor::renameSymbolUnderCursor() diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index 0be089c8333..d48c24a7c64 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -232,6 +232,7 @@ private Q_SLOTS: void updateSemanticInfo(const SemanticInfo &semanticInfo); private: + CPlusPlus::Symbol *markSymbols(); bool sortedMethodOverview() const; CPlusPlus::Symbol *findDefinition(CPlusPlus::Symbol *symbol); virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar); -- GitLab