forked from qt-creator/qt-creator
C++: name of function of class problem
It fixes: * highlighing * find usage * follow symbol when function of class has the same name as: * local variable * template parameter * other struct/union/class/enum * function argument in function scope. Task-number: QTCREATORBUG-8902 Change-Id: Iddc0f764af689babb40d39460d174bac7b919b31 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Sergey Shambir <sergey.shambir.auto@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
9c2a352027
commit
bde6667240
@@ -335,8 +335,14 @@ QList<LookupItem> LookupContext::lookup(const Name *name, Scope *scope) const
|
||||
if (name->identifier() != 0 && scope->isBlock()) {
|
||||
bindings()->lookupInScope(name, scope, &candidates, /*templateId = */ 0, /*binding=*/ 0);
|
||||
|
||||
if (! candidates.isEmpty())
|
||||
break; // it's a local.
|
||||
if (! candidates.isEmpty()) {
|
||||
// it's a local.
|
||||
//for qualified it can be outside of the local scope
|
||||
if (name->isQualifiedNameId())
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < scope->memberCount(); ++i) {
|
||||
if (UsingNamespaceDirective *u = scope->memberAt(i)->asUsingNamespaceDirective()) {
|
||||
@@ -352,8 +358,14 @@ QList<LookupItem> LookupContext::lookup(const Name *name, Scope *scope) const
|
||||
} else if (Function *fun = scope->asFunction()) {
|
||||
bindings()->lookupInScope(name, fun, &candidates, /*templateId = */ 0, /*binding=*/ 0);
|
||||
|
||||
if (! candidates.isEmpty())
|
||||
break; // it's an argument or a template parameter.
|
||||
if (! candidates.isEmpty()) {
|
||||
// it's an argument or a template parameter.
|
||||
//for qualified it can be outside of the local scope
|
||||
if (name->isQualifiedNameId())
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (fun->name() && fun->name()->isQualifiedNameId()) {
|
||||
if (ClassOrNamespace *binding = bindings()->lookupType(fun)) {
|
||||
@@ -379,8 +391,14 @@ QList<LookupItem> LookupContext::lookup(const Name *name, Scope *scope) const
|
||||
} else if (Template *templ = scope->asTemplate()) {
|
||||
bindings()->lookupInScope(name, templ, &candidates, /*templateId = */ 0, /*binding=*/ 0);
|
||||
|
||||
if (! candidates.isEmpty())
|
||||
return candidates; // it's a template parameter.
|
||||
if (! candidates.isEmpty()) {
|
||||
// it's a template parameter.
|
||||
//for qualified it can be outside of the local scope
|
||||
if (name->isQualifiedNameId())
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (scope->asNamespace()
|
||||
|| scope->asClass()
|
||||
|
||||
Reference in New Issue
Block a user