diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp index acbeb6f6fd114a5a2a965d4cbc4c9d4945fe3ca6..c916ab4b8b15640397e77d47516f76a6ee4817af 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();