summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-07-04 09:09:35 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2013-07-12 16:12:59 +0200
commit3cde52846eceba5ee89b2c1d6816d1b97add1ccb (patch)
tree92559c57b01f3d906fbc17f7451ac3a4de99a618 /src/libs/cplusplus/LookupContext.cpp
parent43a3334347b66621fc5ebcc3cc7527ba6a645577 (diff)
downloadqt-creator-3cde52846eceba5ee89b2c1d6816d1b97add1ccb.tar.gz
C++: fix local types and members
It fixes code model when we have local type which contains a member of other type, e.g.: struct OtherType { int otherTypeMember; }; void foo() { struct LocalType { int localTypeMember; OtherType ot; }; LocalType lt; lt.ot.//no code completion } Change-Id: I018f492a6c48bfcbba0ef376ef005825e2b13f35 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 70048af73e..d2ef0243da 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -360,6 +360,15 @@ ClassOrNamespace *LookupContext::lookupType(const Name *name, Scope *scope,
} else if (ClassOrNamespace *b = bindings()->lookupType(scope, enclosingTemplateInstantiation)) {
return b->lookupType(name);
+ } else if (Class *scopeAsClass = scope->asClass()) {
+ if (scopeAsClass->enclosingScope()->isBlock()) {
+ if (ClassOrNamespace *b = lookupType(scopeAsClass->name(),
+ scopeAsClass->enclosingScope(),
+ enclosingTemplateInstantiation,
+ typedefsBeingResolved)) {
+ return b->lookupType(name);
+ }
+ }
}
return 0;