diff --git a/src/AST/Namespace.cs b/src/AST/Namespace.cs index 87487140..d59987de 100644 --- a/src/AST/Namespace.cs +++ b/src/AST/Namespace.cs @@ -71,6 +71,25 @@ namespace CppSharp.AST public Declaration FindAnonymous(ulong key) { return Anonymous.ContainsKey(key) ? Anonymous[key] : null; + } + + public DeclarationContext FindDeclaration(IEnumerable declarations) + { + DeclarationContext currentDeclaration = this; + + foreach (var declaration in declarations) + { + var subDeclaration = currentDeclaration.Namespaces + .Concat(currentDeclaration.Classes) + .FirstOrDefault(e => e.Name.Equals(declaration)); + + if (subDeclaration == null) + return null; + + currentDeclaration = subDeclaration; + } + + return currentDeclaration as DeclarationContext; } public Namespace FindNamespace(string name) @@ -190,9 +209,9 @@ namespace CppSharp.AST var className = entries[entries.Count - 1]; var namespaces = entries.Take(entries.Count - 1); - DeclarationContext declContext = FindNamespace(namespaces); + DeclarationContext declContext = FindDeclaration(namespaces); if (declContext == null) - { + { declContext = FindClass(entries[0]); if (declContext == null) return null;