summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp9
-rw-r--r--src/plugins/cpptools/cppchecksymbols.cpp5
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())