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