forked from qt-creator/qt-creator
C++: fixed resolving complex typedef
Unit test describe this complex typedef. Another step to bring code completion for stl containers. Change-Id: I27985c4ea7c26c723d7a88ce42c5ecf164b6c903 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
c9d7b396e5
commit
2b0e643e3d
20
src/libs/3rdparty/cplusplus/Templates.cpp
vendored
20
src/libs/3rdparty/cplusplus/Templates.cpp
vendored
@@ -526,11 +526,23 @@ FullySpecifiedType Subst::apply(const Name *name) const
|
||||
return _previous->apply(name);
|
||||
|
||||
else if (const QualifiedNameId *q = name->asQualifiedNameId()) {
|
||||
const NamedType *name = apply(q->base())->asNamedType();
|
||||
const NamedType *baseNamedType = apply(q->base())->asNamedType();
|
||||
const NamedType *unqualified = apply(q->name())->asNamedType();
|
||||
if (name && name->name()->identifier() != 0 && unqualified)
|
||||
return control()->namedType(control()->qualifiedNameId(name->name()->identifier(),
|
||||
unqualified->name()));
|
||||
if (baseNamedType) {
|
||||
if (! unqualified) {
|
||||
const Name *qualifiedBase = baseNamedType->name();
|
||||
const Name *qualifiedName = q->name();
|
||||
return control()->namedType(control()->qualifiedNameId(qualifiedBase,
|
||||
qualifiedName));
|
||||
}
|
||||
else if(baseNamedType->name()->identifier() != 0) {
|
||||
const QualifiedNameId *clonedQualifiedNameId
|
||||
= control()->qualifiedNameId(baseNamedType->name()->identifier(),
|
||||
unqualified->name());
|
||||
NamedType *clonedNamedType = control()->namedType(clonedQualifiedNameId);
|
||||
return clonedNamedType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user