summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-11-24 21:02:26 +0100
committerErik Verbruggen <erik.verbruggen@digia.com>2014-03-12 14:07:58 +0100
commit376f77952e9c579043a26fcd6be33baed9fd1610 (patch)
treeab23a657dae14e854f0c07749d4bed7329144341 /src/libs/cplusplus/LookupContext.cpp
parentb96bb6172e736379b780ad72c8c4055b93d82da2 (diff)
downloadqt-creator-376f77952e9c579043a26fcd6be33baed9fd1610.tar.gz
C++: fix support for nested anonymous classes
A member of nested anonymous class should be visible as a member of enclosing class(if there is no declaration of this nested anonymous class). Fix: * marking * find usage * follow symbol * completion Task-number: QTCREATORBUG-10876 Task-number: QTCREATORBUG-11170 Change-Id: If5b4d198e9075f2a8aa899ae59190f2c05f7b1ff Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Przemyslaw Gorszkowski <pgorszkowski@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index ecf54a5f1a..0d600993c6 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -680,6 +680,15 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding
foreach (ClassOrNamespace *u, binding->usings())
lookup_helper(name, u, result, processed, binding->_templateId);
+
+ Anonymouses::const_iterator cit = binding->_anonymouses.begin();
+ Anonymouses::const_iterator citEnd = binding->_anonymouses.end();
+ for (; cit != citEnd; ++cit) {
+ const AnonymousNameId *anonymousNameId = cit.key();
+ ClassOrNamespace *a = cit.value();
+ if (!binding->_declaredAnonymouses.contains(anonymousNameId))
+ lookup_helper(name, a, result, processed, binding->_templateId);
+ }
}
}
@@ -1578,8 +1587,12 @@ bool CreateBindings::visit(Declaration *decl)
}
}
}
+ } else if (Class *clazz = decl->type()->asClassType()) {
+ if (const Name *name = clazz->name()) {
+ if (const AnonymousNameId *anonymousNameId = name->asAnonymousNameId())
+ _currentClassOrNamespace->_declaredAnonymouses.insert(anonymousNameId);
+ }
}
-
return false;
}