Commit 97c6671e authored by Roberto Raggi's avatar Roberto Raggi

Mark the usages of a symbol using the semantic highlighter.

parent 659a231a
...@@ -737,6 +737,9 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor, ...@@ -737,6 +737,9 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor,
Document::Ptr doc, Document::Ptr doc,
const Snapshot &snapshot) const const Snapshot &snapshot) const
{ {
if (! doc)
return 0;
QTextCursor tc = cursor; QTextCursor tc = cursor;
int line, col; int line, col;
convertPosition(tc.position(), &line, &col); convertPosition(tc.position(), &line, &col);
...@@ -768,16 +771,10 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor, ...@@ -768,16 +771,10 @@ CPlusPlus::Symbol *CPPEditor::findCanonicalSymbol(const QTextCursor &cursor,
void CPPEditor::findUsages() void CPPEditor::findUsages()
{ {
updateSemanticInfo(m_semanticHighlighter->semanticInfo(currentSource())); if (Symbol *canonicalSymbol = markSymbols()) {
SemanticInfo info = m_lastSemanticInfo;
if (! info.doc)
return;
if (Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot))
m_modelManager->findUsages(canonicalSymbol); m_modelManager->findUsages(canonicalSymbol);
}
} }
void CPPEditor::renameUsages() void CPPEditor::renameUsages()
...@@ -790,7 +787,15 @@ void CPPEditor::renameUsages() ...@@ -790,7 +787,15 @@ void CPPEditor::renameUsages()
void CPPEditor::renameUsagesNow() 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; m_currentRenameSelection = -1;
...@@ -798,35 +803,33 @@ void CPPEditor::renameUsagesNow() ...@@ -798,35 +803,33 @@ void CPPEditor::renameUsagesNow()
SemanticInfo info = m_lastSemanticInfo; SemanticInfo info = m_lastSemanticInfo;
if (info.doc) { Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot);
if (Symbol *canonicalSymbol = findCanonicalSymbol(textCursor(), info.doc, info.snapshot)) { if (canonicalSymbol) {
TranslationUnit *unit = info.doc->translationUnit(); 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);
if (column) const QList<int> references = m_modelManager->references(canonicalSymbol, info.doc, info.snapshot);
--column; // adjust the column position. 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)); const int len = unit->tokenAt(index).f.length;
cursor.setPosition(cursor.position() + column);
cursor.setPosition(cursor.position() + len, QTextCursor::KeepAnchor);
QTextEdit::ExtraSelection sel; QTextCursor cursor(document()->findBlockByNumber(line - 1));
sel.format = m_occurrencesFormat; cursor.setPosition(cursor.position() + column);
sel.cursor = cursor; cursor.setPosition(cursor.position() + len, QTextCursor::KeepAnchor);
selections.append(sel);
}
setExtraSelections(CodeSemanticsSelection, selections);
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() void CPPEditor::renameSymbolUnderCursor()
......
...@@ -232,6 +232,7 @@ private Q_SLOTS: ...@@ -232,6 +232,7 @@ private Q_SLOTS:
void updateSemanticInfo(const SemanticInfo &semanticInfo); void updateSemanticInfo(const SemanticInfo &semanticInfo);
private: private:
CPlusPlus::Symbol *markSymbols();
bool sortedMethodOverview() const; bool sortedMethodOverview() const;
CPlusPlus::Symbol *findDefinition(CPlusPlus::Symbol *symbol); CPlusPlus::Symbol *findDefinition(CPlusPlus::Symbol *symbol);
virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar); virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment