public NamespaceDecl(Cursor c, ISymbolTable table) : base(c, table) { Debug.Assert(c.Kind == CursorKind.Namespace); if(c.SemanticParentCurosr.Kind == CursorKind.Namespace) { _parent = table.FindNamespaceDeclaration(c.SemanticParentCurosr.Usr); Debug.Assert(_parent != null); } }
private DeclarationViewModel FindOrAddNamespaceNode(NamespaceDecl ns) { List<NamespaceDecl> parents = new List<NamespaceDecl>(); NamespaceDecl temp = ns.ParentNamespace; while (temp != null) { parents.Insert(0, temp); temp = temp.ParentNamespace; } DeclarationViewModel parentNode = null; if (parents.Count > 0) { foreach (NamespaceDecl parent in parents) { if (parentNode == null) { parentNode = FindRootLevelItem(parent.Usr); } else { parentNode = parentNode.FindOrAddChildDecl(parent); if (parentNode == null) return null; } } return parentNode.FindOrAddChildDecl(ns); } DeclarationViewModel result = FindRootLevelItem(ns.Usr); if(result == null) { result = new DeclarationViewModel(parentNode, ns); _root.Add(result); } return result; }