diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2012-12-07 14:31:32 +0100 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2012-12-20 10:46:44 +0100 |
commit | b1199ef0ccee33b34b0c95d4bbac153bbf2a5be2 (patch) | |
tree | 309907a8160fc2a7dce42a954f34f7a6b8375b2e /src/libs/cplusplus/ResolveExpression.cpp | |
parent | 17748280e8557bb8ef02231b01af613186f083b8 (diff) | |
download | qt-creator-b1199ef0ccee33b34b0c95d4bbac153bbf2a5be2.tar.gz |
C++: Fix code completion for nested classes
Fix code completion for nested classes when enclosing is
template class.
Unit tests
Task-number: QTCREATORBUG-8245 (only standalone)
Change-Id: Ib31ad4b799db927b56debd4dc3e7403404c1839d
Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r-- | src/libs/cplusplus/ResolveExpression.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index eaa53f738f..a6c3c10141 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -811,16 +811,17 @@ bool ResolveExpression::visit(MemberAccessAST *ast) return false; } -ClassOrNamespace *ResolveExpression::findClass(const FullySpecifiedType &originalTy, Scope *scope) const +ClassOrNamespace *ResolveExpression::findClass(const FullySpecifiedType &originalTy, Scope *scope, + ClassOrNamespace* enclosingTemplateInstantiation) const { FullySpecifiedType ty = originalTy.simplified(); ClassOrNamespace *binding = 0; if (Class *klass = ty->asClassType()) - binding = _context.lookupType(klass); + binding = _context.lookupType(klass, enclosingTemplateInstantiation); else if (NamedType *namedTy = ty->asNamedType()) - binding = _context.lookupType(namedTy->name(), scope); + binding = _context.lookupType(namedTy->name(), scope, enclosingTemplateInstantiation); else if (Function *funTy = ty->asFunctionType()) return findClass(funTy->returnType(), scope); @@ -979,7 +980,13 @@ ClassOrNamespace *ResolveExpression::baseExpression(const QList<LookupItem> &bas } } - if (ClassOrNamespace *binding = findClass(ty, scope)) + ClassOrNamespace *enclosingTemplateInstantiation = 0; + if (ClassOrNamespace *binding = r.binding()) { + if (binding->instantiationOrigin()) + enclosingTemplateInstantiation = binding; + } + + if (ClassOrNamespace *binding = findClass(ty, scope, enclosingTemplateInstantiation)) return binding; } } |