summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CheckUndefinedSymbols.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-05-25 17:49:29 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-05-25 17:49:43 +0200
commitce3a90fc782fa810b5cff35f8613d5bce6cc44f7 (patch)
tree98632fef805f434a3a3d679eacfee78894c9b546 /src/libs/cplusplus/CheckUndefinedSymbols.cpp
parentcedaebc315c6750f5cf08ca1d1e8dc000dc4d496 (diff)
downloadqt-creator-ce3a90fc782fa810b5cff35f8613d5bce6cc44f7.tar.gz
Highlight namespaces.
Diffstat (limited to 'src/libs/cplusplus/CheckUndefinedSymbols.cpp')
-rw-r--r--src/libs/cplusplus/CheckUndefinedSymbols.cpp71
1 files changed, 31 insertions, 40 deletions
diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
index 7de0f7c77d..7b1d0a8f79 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
@@ -273,40 +273,33 @@ bool CheckUndefinedSymbols::warning(AST *ast, const QString &text)
return false;
}
-bool CheckUndefinedSymbols::visit(UsingDirectiveAST *ast)
+bool CheckUndefinedSymbols::visit(NamespaceAST *ast)
{
- checkNamespace(ast->name);
- return false;
+ if (ast->identifier_token) {
+ const Token &tok = tokenAt(ast->identifier_token);
+ if (! tok.generated()) {
+ unsigned line, column;
+ getTokenStartPosition(ast->identifier_token, &line, &column);
+ Use use(line, column, tok.length());
+ _typeUsages.append(use);
+ }
+ }
+
+ return true;
}
-bool CheckUndefinedSymbols::visit(SimpleDeclarationAST *)
+bool CheckUndefinedSymbols::visit(UsingDirectiveAST *)
{
return true;
}
-bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *ast)
+bool CheckUndefinedSymbols::visit(SimpleDeclarationAST *)
{
-#if 0
- if (ast->name) {
- unsigned line, column;
- getTokenStartPosition(ast->name->firstToken(), &line, &column);
-
- // ### use the potential types.
- Scope *enclosingScope = _context.thisDocument()->scopeAt(line, column);
- const QList<Symbol *> candidates = _context.lookup(ast->name->name, enclosingScope);
-
- Symbol *ty = 0;
- foreach (Symbol *c, candidates) {
- if (c->isTypedef() || c->isClass() || c->isEnum()
- || c->isForwardClassDeclaration() || c->isTypenameArgument())
- ty = c;
- }
-
- if (! ty)
- warning(ast->name, QCoreApplication::translate("CheckUndefinedSymbols", "Expected a type-name"));
- }
-#endif
+ return true;
+}
+bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *)
+{
return true;
}
@@ -330,7 +323,7 @@ void CheckUndefinedSymbols::checkNamespace(NameAST *name)
warning(line, column, QCoreApplication::translate("CheckUndefinedSymbols", "Expected a namespace-name"), length);
}
-bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
+void CheckUndefinedSymbols::checkName(NameAST *ast)
{
if (ast->name) {
const QByteArray id = QByteArray::fromRawData(ast->name->identifier()->chars(), // ### move
@@ -345,25 +338,17 @@ bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
addTypeUsage(candidates, ast);
}
}
+}
+bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
+{
+ checkName(ast);
return true;
}
bool CheckUndefinedSymbols::visit(TemplateIdAST *ast)
{
- if (ast->name) {
- const QByteArray id = QByteArray::fromRawData(ast->name->identifier()->chars(), // ### move
- ast->name->identifier()->size());
- if (_potentialTypes.contains(id)) {
- Scope *scope = CollectTypes::findScope(tokenAt(ast->firstToken()).offset, _scopes); // ### move
- if (! scope)
- scope = _context.thisDocument()->globalSymbols();
-
- ClassOrNamespace *b = _context.lookupType(ast->name, scope);
- addTypeUsage(b, ast);
- }
- }
-
+ checkName(ast);
return true;
}
@@ -446,7 +431,13 @@ void CheckUndefinedSymbols::addTypeUsage(const QList<Symbol *> &candidates, Name
const unsigned length = tok.length();
foreach (Symbol *c, candidates) {
- if (c->isTypedef() || c->isClass() || c->isEnum() || c->isForwardClassDeclaration() || c->isTypenameArgument()) {
+ if (c->isUsingDeclaration()) // skip using declarations...
+ continue;
+ else if (c->isUsingNamespaceDirective()) // ... and using namespace directives.
+ continue;
+ else if (c->isTypedef() || c->isNamespace() ||
+ c->isClass() || c->isEnum() ||
+ c->isForwardClassDeclaration() || c->isTypenameArgument()) {
Use use(line, column, length);
_typeUsages.append(use);
//qDebug() << "added use" << oo(ast->name) << line << column << length;