forked from qt-creator/qt-creator
C++: fixed operator arrow of nested class of enclosing template
Fixed: * code completion * highlighting * find usage * follow symbol Task-number: QTCREATORBUG-9005 Change-Id: I3fcc2638482ca1071c1aa7b6aab0d4dd128595bb Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
7543a08582
commit
9c2a352027
@@ -1106,29 +1106,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