Simplified SemanticInfo::Use.

This commit is contained in:
Roberto Raggi
2009-07-09 17:32:39 +02:00
parent 8c64c97c15
commit e0f550733e
2 changed files with 16 additions and 61 deletions

View File

@@ -215,7 +215,7 @@ protected:
if (member->identifier() != id) if (member->identifier() != id)
continue; continue;
else if (member->line() < line || (member->line() == line && member->column() <= column)) { else if (member->line() < line || (member->line() == line && member->column() <= column)) {
localUses[member].append(SemanticInfo::Use(ast, line, column, id->size())); localUses[member].append(SemanticInfo::Use(line, column, id->size()));
return true; return true;
} }
} }
@@ -251,7 +251,7 @@ protected:
} }
Identifier *id = identifier(ast->identifier_token); Identifier *id = identifier(ast->identifier_token);
externalUses[id].append(SemanticInfo::Use(ast, line, column, id->size())); externalUses[id].append(SemanticInfo::Use(line, column, id->size()));
return false; return false;
} }
@@ -283,7 +283,7 @@ protected:
} }
Identifier *id = identifier(ast->identifier_token); Identifier *id = identifier(ast->identifier_token);
externalUses[id].append(SemanticInfo::Use(ast, line, column, id->size())); externalUses[id].append(SemanticInfo::Use(line, column, id->size()));
for (TemplateArgumentListAST *arg = ast->template_arguments; arg; arg = arg->next) for (TemplateArgumentListAST *arg = ast->template_arguments; arg; arg = arg->next)
accept(arg); accept(arg);
@@ -902,7 +902,6 @@ void CPPEditor::updateMethodBoxIndex()
static void highlightUses(QTextDocument *doc, static void highlightUses(QTextDocument *doc,
const QTextCharFormat &format, const QTextCharFormat &format,
TranslationUnit *translationUnit,
const QList<SemanticInfo::Use> &uses, const QList<SemanticInfo::Use> &uses,
QList<QTextEdit::ExtraSelection> *selections) QList<QTextEdit::ExtraSelection> *selections)
{ {
@@ -910,34 +909,18 @@ static void highlightUses(QTextDocument *doc,
return; return;
foreach (const SemanticInfo::Use &use, uses) { foreach (const SemanticInfo::Use &use, uses) {
NameAST *name = use.name; QTextEdit::ExtraSelection sel;
bool generated = false;
for (unsigned tk = name->firstToken(), end = name->lastToken(); tk != end; ++tk) { sel.format = format;
if (translationUnit->tokenAt(tk).generated) { sel.cursor = QTextCursor(doc);
generated = true;
break;
}
}
if (! generated) { const int anchor = doc->findBlockByNumber(use.line - 1).position() + use.column - 1;
unsigned startLine, startColumn; const int position = anchor + use.length;
unsigned endLine, endColumn;
unsigned identifier_token = name->firstToken(); sel.cursor.setPosition(anchor);
sel.cursor.setPosition(position, QTextCursor::KeepAnchor);
translationUnit->getTokenStartPosition(identifier_token, &startLine, &startColumn); selections->append(sel);
translationUnit->getTokenEndPosition(identifier_token, &endLine, &endColumn);
QTextEdit::ExtraSelection sel;
sel.cursor = QTextCursor(doc);
sel.cursor.setPosition(doc->findBlockByNumber(startLine - 1).position() + startColumn - 1);
sel.cursor.setPosition(doc->findBlockByNumber(endLine - 1).position() + endColumn - 1,
QTextCursor::KeepAnchor);
sel.format = format;
selections->append(sel);
}
} }
} }
@@ -1641,8 +1624,6 @@ void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo)
QList<QTextEdit::ExtraSelection> selections; QList<QTextEdit::ExtraSelection> selections;
TranslationUnit *translationUnit = semanticInfo.doc->translationUnit();
SemanticInfo::LocalUseIterator it(semanticInfo.localUses); SemanticInfo::LocalUseIterator it(semanticInfo.localUses);
while (it.hasNext()) { while (it.hasNext()) {
it.next(); it.next();
@@ -1661,36 +1642,11 @@ void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo)
if (! good) if (! good)
continue; continue;
highlightUses(document(), format, translationUnit, uses, &selections); highlightUses(document(), format, uses, &selections);
break; // done break; // done
} }
#if 0
SemanticInfo::ExternalUseIterator it2(semanticInfo.externalUses);
while (it2.hasNext()) {
it2.next();
const QList<Use> &uses = it2.value();
bool good = false;
foreach (const Use &use, uses) {
unsigned l = line;
unsigned c = column + 1; // convertCursorPosition() returns a 0-based column number.
if (l == use.line && c >= use.column && c <= (use.column + use.length)) {
good = true;
break;
}
}
if (! good)
continue;
highlightUses(document(), format, translationUnit, uses, &selections);
break; // done
}
#endif
setExtraSelections(CodeSemanticsSelection, selections); setExtraSelections(CodeSemanticsSelection, selections);
} }
SemanticHighlighter::Source CPPEditor::currentSource() SemanticHighlighter::Source CPPEditor::currentSource()

View File

@@ -31,7 +31,6 @@
#define CPPEDITOR_H #define CPPEDITOR_H
#include "cppeditorenums.h" #include "cppeditorenums.h"
#include <ASTfwd.h>
#include <cplusplus/CppDocument.h> #include <cplusplus/CppDocument.h>
#include <texteditor/basetexteditor.h> #include <texteditor/basetexteditor.h>
@@ -67,15 +66,15 @@ class SemanticInfo
{ {
public: public:
struct Use { struct Use {
CPlusPlus::NameAST *name;
unsigned line; unsigned line;
unsigned column; unsigned column;
unsigned length; unsigned length;
Use() {} Use()
: line(0), column(0), length(0) {}
Use(CPlusPlus::NameAST *name, unsigned line, unsigned column, unsigned length) Use(unsigned line, unsigned column, unsigned length)
: name(name), line(line), column(column), length(length) {} : line(line), column(column), length(length) {}
}; };
typedef QHash<CPlusPlus::Symbol *, QList<Use> > LocalUseMap; typedef QHash<CPlusPlus::Symbol *, QList<Use> > LocalUseMap;