summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/ResolveExpression.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2012-12-07 14:31:32 +0100
committerhjk <qthjk@ovi.com>2012-12-20 10:46:44 +0100
commitb1199ef0ccee33b34b0c95d4bbac153bbf2a5be2 (patch)
tree309907a8160fc2a7dce42a954f34f7a6b8375b2e /src/libs/cplusplus/ResolveExpression.cpp
parent17748280e8557bb8ef02231b01af613186f083b8 (diff)
downloadqt-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.cpp15
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;
}
}