private static void MarkAmbiguousNamespaceTypes(NamespaceHierarchyItem item)
 {
     foreach (var nsModel in item.Models)
         nsModel.IsAmbiguous = true;
     foreach (var subItem in item.SubNamespaces)
         MarkAmbiguousNamespaceTypes(subItem);
 }
示例#2
0
        private IEnumerable <CodeNamespace> GenerateCode()
        {
            var hierarchy = NamespaceHierarchyItem.Build(Namespaces.Values.GroupBy(x => x.Name).SelectMany(x => x))
                            .MarkAmbiguousNamespaceTypes();

            return(hierarchy.Flatten()
                   .Select(nhi => NamespaceModel.Generate(nhi.FullName, nhi.Models)));
        }
示例#3
0
 private static void MarkAmbiguousNamespaceTypes(NamespaceHierarchyItem item)
 {
     foreach (var nsModel in item.Models)
     {
         nsModel.IsAmbiguous = true;
     }
     foreach (var subItem in item.SubNamespaces)
     {
         MarkAmbiguousNamespaceTypes(subItem);
     }
 }
 private static void MarkAmbiguousNamespaceTypes(string rootName, NamespaceHierarchyItem item, List<TypeModel> parentTypes)
 {
     var visibleTypes = new List<TypeModel>(parentTypes);
     visibleTypes.AddRange(item.TypeModels);
     var visibleTypesLookup = visibleTypes.ToLookup(x => x.Name);
     var isAmbiguous = visibleTypesLookup.Contains(rootName);
     if (isAmbiguous)
     {
         MarkAmbiguousNamespaceTypes(item);
     }
     else
     {
         foreach (var subItem in item.SubNamespaces)
             MarkAmbiguousNamespaceTypes(rootName, subItem, visibleTypes);
     }
 }
示例#5
0
        public static IEnumerable <NamespaceHierarchyItem> Build(IEnumerable <NamespaceModel> namespaceModels)
        {
            var rootItem    = new NamespaceHierarchyItem(null, null);
            var activeParts = new List <NamespaceHierarchyItem>();

            foreach (var namespaceModel in namespaceModels.OrderBy(x => x.Name))
            {
                var parts    = namespaceModel.Name.Split('.');
                var prevItem = rootItem;
                for (var i = 0; i != parts.Length; ++i)
                {
                    var  name     = parts[i];
                    var  fullName = string.Join(".", parts.Take(i + 1));
                    bool createNewItem;
                    if (activeParts.Count == i)
                    {
                        createNewItem = true;
                    }
                    else if (name != activeParts[i].Name)
                    {
                        activeParts.RemoveRange(i, activeParts.Count - i);
                        createNewItem = true;
                    }
                    else
                    {
                        createNewItem = false;
                    }
                    if (createNewItem)
                    {
                        var newItem = new NamespaceHierarchyItem(name, fullName);
                        prevItem.InternalSubNamespaces.Add(newItem);
                        activeParts.Add(newItem);
                        prevItem = newItem;
                    }
                    else
                    {
                        prevItem = activeParts[i];
                    }
                    if (i == parts.Length - 1)
                    {
                        prevItem.InternalNamespaceModels.Add(namespaceModel);
                        prevItem.InternalTypeModels.AddRange(namespaceModel.Types.Values);
                    }
                }
            }
            return(rootItem.InternalSubNamespaces);
        }
 public static IEnumerable<NamespaceHierarchyItem> Build(IEnumerable<NamespaceModel> namespaceModels)
 {
     var rootItem = new NamespaceHierarchyItem(null, null);
     var activeParts = new List<NamespaceHierarchyItem>();
     foreach (var namespaceModel in namespaceModels.OrderBy(x => x.Name))
     {
         var parts = namespaceModel.Name.Split('.');
         var prevItem = rootItem;
         for (var i = 0; i != parts.Length; ++i)
         {
             var name = parts[i];
             var fullName = string.Join(".", parts.Take(i + 1));
             bool createNewItem;
             if (activeParts.Count == i)
             {
                 createNewItem = true;
             }
             else if (name != activeParts[i].Name)
             {
                 activeParts.RemoveRange(i, activeParts.Count - i);
                 createNewItem = true;
             }
             else
                 createNewItem = false;
             if (createNewItem)
             {
                 var newItem = new NamespaceHierarchyItem(name, fullName);
                 prevItem.InternalSubNamespaces.Add(newItem);
                 activeParts.Add(newItem);
                 prevItem = newItem;
             }
             else
             {
                 prevItem = activeParts[i];
             }
             if (i == parts.Length - 1)
             {
                 prevItem.InternalNamespaceModels.Add(namespaceModel);
                 prevItem.InternalTypeModels.AddRange(namespaceModel.Types.Values);
             }
         }
     }
     return rootItem.InternalSubNamespaces;
 }
示例#7
0
        private static void MarkAmbiguousNamespaceTypes(string rootName, NamespaceHierarchyItem item, List <TypeModel> parentTypes)
        {
            var visibleTypes = new List <TypeModel>(parentTypes);

            visibleTypes.AddRange(item.TypeModels);
            var visibleTypesLookup = visibleTypes.ToLookup(x => x.Name);
            var isAmbiguous        = visibleTypesLookup.Contains(rootName);

            if (isAmbiguous)
            {
                MarkAmbiguousNamespaceTypes(item);
            }
            else
            {
                foreach (var subItem in item.SubNamespaces)
                {
                    MarkAmbiguousNamespaceTypes(rootName, subItem, visibleTypes);
                }
            }
        }