forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.7'
Conflicts: src/plugins/cpptools/cppchecksymbols.h src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp Change-Id: I887ba071fa637ad44e39bcae581738fa078a6612
This commit is contained in:
@@ -336,8 +336,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()) {
|
||||
@@ -353,8 +359,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)) {
|
||||
@@ -380,8 +392,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()
|
||||
@@ -624,7 +642,8 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
|
||||
|
||||
if (s->asNamespaceAlias() && binding) {
|
||||
ClassOrNamespace *targetNamespaceBinding = binding->lookupType(name);
|
||||
if (targetNamespaceBinding && targetNamespaceBinding->symbols().size() == 1) {
|
||||
//there can be many namespace definitions
|
||||
if (targetNamespaceBinding && targetNamespaceBinding->symbols().size() > 0) {
|
||||
Symbol *resolvedSymbol = targetNamespaceBinding->symbols().first();
|
||||
item.setType(resolvedSymbol->type()); // override the type
|
||||
}
|
||||
@@ -1107,29 +1126,26 @@ bool ClassOrNamespace::NestedClassInstantiator::isInstantiateNestedClassNeeded(c
|
||||
bool ClassOrNamespace::NestedClassInstantiator::containsTemplateType(Declaration *declaration) const
|
||||
{
|
||||
Type *memberType = declaration->type().type();
|
||||
NamedType *memberNamedType = findMemberNamedType(memberType);
|
||||
if (memberNamedType) {
|
||||
const Name *name = memberNamedType->name();
|
||||
if (_subst.contains(name))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
NamedType *namedType = findNamedType(memberType);
|
||||
return namedType && _subst.contains(namedType->name());
|
||||
}
|
||||
|
||||
bool ClassOrNamespace::NestedClassInstantiator::containsTemplateType(Function * /*function*/) const
|
||||
bool ClassOrNamespace::NestedClassInstantiator::containsTemplateType(Function *function) const
|
||||
{
|
||||
//TODO: make implementation
|
||||
return false;
|
||||
Type *returnType = function->returnType().type();
|
||||
NamedType *namedType = findNamedType(returnType);
|
||||
return namedType && _subst.contains(namedType->name());
|
||||
//TODO: in future we will need also check function arguments, for now returned value is enough
|
||||
}
|
||||
|
||||
NamedType *ClassOrNamespace::NestedClassInstantiator::findMemberNamedType(Type *memberType) const
|
||||
NamedType *ClassOrNamespace::NestedClassInstantiator::findNamedType(Type *memberType) const
|
||||
{
|
||||
if (NamedType *namedType = memberType->asNamedType())
|
||||
return namedType;
|
||||
else if (PointerType *pointerType = memberType->asPointerType())
|
||||
return findMemberNamedType(pointerType->elementType().type());
|
||||
return findNamedType(pointerType->elementType().type());
|
||||
else if (ReferenceType *referenceType = memberType->asReferenceType())
|
||||
return findMemberNamedType(referenceType->elementType().type());
|
||||
return findNamedType(referenceType->elementType().type());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user