diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2013-07-04 09:09:35 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-07-12 16:12:59 +0200 |
commit | 3cde52846eceba5ee89b2c1d6816d1b97add1ccb (patch) | |
tree | 92559c57b01f3d906fbc17f7451ac3a4de99a618 /src/libs/cplusplus/LookupContext.cpp | |
parent | 43a3334347b66621fc5ebcc3cc7527ba6a645577 (diff) | |
download | qt-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.cpp | 9 |
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; |