Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 3
0
 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;
			}
		}