static UnresolvedNamespace GetOrAddNamespace(Dictionary <string, UnresolvedNamespace> dict, string fullName) { UnresolvedNamespace ns; if (dict.TryGetValue(fullName, out ns)) { return(ns); } int pos = fullName.LastIndexOf('.'); UnresolvedNamespace parent; string name; if (pos < 0) { parent = dict[string.Empty]; // root name = fullName; } else { parent = GetOrAddNamespace(dict, fullName.Substring(0, pos)); name = fullName.Substring(pos + 1); } ns = new UnresolvedNamespace(fullName, name); parent.Children.Add(ns); dict.Add(fullName, ns); return(ns); }
UnresolvedNamespace GetUnresolvedRootNamespace(StringComparer nameComparer) { Debug.Assert(IsFrozen); if (unresolvedNamespacesPerNameComparer == null) { unresolvedNamespacesPerNameComparer = new List <KeyValuePair <StringComparer, Implementation.DefaultUnresolvedAssembly.UnresolvedNamespace> >(); } lock (unresolvedNamespacesPerNameComparer) { foreach (var pair in unresolvedNamespacesPerNameComparer) { if (pair.Key == nameComparer) { return(pair.Value); } } var root = new UnresolvedNamespace(string.Empty, string.Empty); var dict = new Dictionary <string, UnresolvedNamespace>(nameComparer); dict.Add(root.FullName, root); foreach (var typeName in typeDefinitions.Keys) { GetOrAddNamespace(dict, typeName.Namespace); } unresolvedNamespacesPerNameComparer.Add(new KeyValuePair <StringComparer, UnresolvedNamespace>(nameComparer, root)); return(root); } }
public NS(DefaultResolvedAssembly assembly, UnresolvedNamespace ns, INamespace parentNamespace) { this.assembly = assembly; this.ns = ns; this.parentNamespace = parentNamespace; this.childNamespaces = new ProjectedList <NS, UnresolvedNamespace, NS>( this, ns.Children, (self, c) => new NS(self.assembly, c, self)); }
UnresolvedNamespace GetUnresolvedRootNamespace(StringComparer nameComparer) { Debug.Assert(IsFrozen); LazyInitializer.EnsureInitialized(ref unresolvedNamespacesPerNameComparer); lock (unresolvedNamespacesPerNameComparer) { foreach (var pair in unresolvedNamespacesPerNameComparer) { if (pair.Key == nameComparer) { return(pair.Value); } } var root = new UnresolvedNamespace(string.Empty, string.Empty); var dict = new Dictionary <string, UnresolvedNamespace>(nameComparer); dict.Add(root.FullName, root); foreach (var typeName in typeDefinitions.Keys) { GetOrAddNamespace(dict, typeName.Namespace); } unresolvedNamespacesPerNameComparer.Add(new KeyValuePair <StringComparer, UnresolvedNamespace>(nameComparer, root)); return(root); } }
public NS(DefaultResolvedAssembly assembly, UnresolvedNamespace ns, INamespace parentNamespace) { this.assembly = assembly; this.ns = ns; this.parentNamespace = parentNamespace; this.childNamespaces = new ProjectedList<NS, UnresolvedNamespace, NS>( this, ns.Children, (self, c) => new NS(self.assembly, c, self)); }
static UnresolvedNamespace GetOrAddNamespace(Dictionary<string, UnresolvedNamespace> dict, string fullName) { UnresolvedNamespace ns; if (dict.TryGetValue(fullName, out ns)) return ns; int pos = fullName.LastIndexOf('.'); UnresolvedNamespace parent; string name; if (pos < 0) { parent = dict[string.Empty]; // root name = fullName; } else { parent = GetOrAddNamespace(dict, fullName.Substring(0, pos)); name = fullName.Substring(pos + 1); } ns = new UnresolvedNamespace(fullName, name); parent.Children.Add(ns); dict.Add(fullName, ns); return ns; }
UnresolvedNamespace GetUnresolvedRootNamespace(StringComparer nameComparer) { Debug.Assert(IsFrozen); LazyInitializer.EnsureInitialized(ref unresolvedNamespacesPerNameComparer); lock (unresolvedNamespacesPerNameComparer) { foreach (var pair in unresolvedNamespacesPerNameComparer) { if (pair.Key == nameComparer) return pair.Value; } var root = new UnresolvedNamespace(string.Empty, string.Empty); var dict = new Dictionary<string, UnresolvedNamespace>(nameComparer); dict.Add(root.FullName, root); foreach (var typeName in typeDefinitions.Keys) { GetOrAddNamespace(dict, typeName.Namespace); } unresolvedNamespacesPerNameComparer.Add(new KeyValuePair<StringComparer, UnresolvedNamespace>(nameComparer, root)); return root; } }