diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 9 | ||||
| -rw-r--r-- | src/plugins/cpptools/cppchecksymbols.cpp | 5 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 5f7b7db312..d6a5ecb865 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -246,12 +246,13 @@ QList<LookupItem> LookupContext::lookupByUsing(const Name *name, Scope *scope) c { QList<LookupItem> candidates; // if it is a nameId there can be a using declaration for it - if (name->isNameId()) { + if (name->isNameId() || name->isTemplateNameId()) { for (unsigned i = 0, count = scope->memberCount(); i < count; ++i) { if (UsingDeclaration *u = scope->memberAt(i)->asUsingDeclaration()) { if (const Name *usingDeclarationName = u->name()) { if (const QualifiedNameId *q = usingDeclarationName->asQualifiedNameId()) { - if (q->name() && q->name()->isEqualTo(name)) { + if (q->name() && q->identifier() && name->identifier() + && q->name()->identifier()->isEqualTo(name->identifier())) { candidates = bindings()->globalNamespace()->find(q); // if it is not a global scope(scope of scope is not equal 0) @@ -267,6 +268,10 @@ QList<LookupItem> LookupContext::lookupByUsing(const Name *name, Scope *scope) c } } } + } else if (const QualifiedNameId *q = name->asQualifiedNameId()) { + ClassOrNamespace *base = lookupType(q->base(), scope); + if (base && base->symbols().size() > 0 && base->symbols().first()->asScope()) + return lookupByUsing(q->name(), base->symbols().first()->asScope()); } return candidates; } diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index a9cf95b66e..8c7625e1e0 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -852,7 +852,10 @@ bool CheckSymbols::visit(QualifiedNameAST *ast) addUse(ast->unqualified_name, CppHighlightingSupport::FunctionUse); } } else { - maybeAddTypeOrStatic(binding->find(ast->unqualified_name->name), ast->unqualified_name); + QList<LookupItem> items = binding->find(ast->unqualified_name->name); + if (items.empty()) + items = _context.lookup(ast->name, enclosingScope()); + maybeAddTypeOrStatic(items, ast->unqualified_name); } if (TemplateIdAST *template_id = ast->unqualified_name->asTemplateId()) |
