summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-09 11:33:31 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-09 11:33:31 +0200
commit97c6671ea8938dd803554050be592c78b6c95036 (patch)
tree02201a27692c027d0004a3abc0d4ca707d95bc1f
parent659a231a041d0067852c0a5c120c7bd06260919b (diff)
downloadqt-creator-97c6671ea8938dd803554050be592c78b6c95036.tar.gz
Mark the usages of a symbol using the semantic highlighter.
-rw-r--r--src/plugins/cppeditor/cppeditor.cpp67
-rw-r--r--src/plugins/cppeditor/cppeditor.h1
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);