diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-09 11:33:31 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-09 11:33:31 +0200 |
commit | 97c6671ea8938dd803554050be592c78b6c95036 (patch) | |
tree | 02201a27692c027d0004a3abc0d4ca707d95bc1f | |
parent | 659a231a041d0067852c0a5c120c7bd06260919b (diff) | |
download | qt-creator-97c6671ea8938dd803554050be592c78b6c95036.tar.gz |
Mark the usages of a symbol using the semantic highlighter.
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 67 | ||||
-rw-r--r-- | 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 d8401f06e4..d4fc1bf645 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 0be089c833..d48c24a7c6 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); |