summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/CppBindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/cplusplus/CppBindings.cpp')
-rw-r--r--src/libs/cplusplus/CppBindings.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp
index acbeb6f6fd..c916ab4b8b 100644
--- a/src/libs/cplusplus/CppBindings.cpp
+++ b/src/libs/cplusplus/CppBindings.cpp
@@ -152,6 +152,25 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet<Binding *> *pr
if (processed->contains(this))
return 0;
+ if (const QualifiedNameId *q = name->asQualifiedNameId()) {
+ Binding *current = this;
+
+ for (unsigned i = 0; i < q->nameCount(); ++i) {
+ Identifier *nameId = q->nameAt(i)->identifier();
+ if (! nameId)
+ return 0;
+
+ QSet<Binding *> visited;
+ Binding *binding = current->findClassOrNamespaceBinding(nameId, &visited); // ### TODO: check recursion.
+ if (! binding)
+ return 0;
+
+ current = binding;
+ }
+
+ return current->asClassBinding();
+ }
+
processed->insert(this);
Identifier *id = name->identifier();