public List <ObjectRootNamespace> ComputeObjectRoots() { List <ObjectRootNamespace> roots = new List <ObjectRootNamespace>(); string[] objects = fileSystem.ReadInputFile(); objects = RemoveIgnoredObjects(objects); objects = RemoveHashes(objects); //Setup all the namespaces for the objects foreach (string obj in objects) { string rootNamespaces = GetNamespaceFromObj(obj); List <string> subNamespaces = ExtractNamespaceComponents(obj); ObjectRootNamespace rootObj = CreateRootNamespace(ref roots, rootNamespaces); if (subNamespaces.Count > 0) { PopulateRootNamespace(rootObj, subNamespaces); } rootObj.Objects.Add(obj); } return(roots); }
private static void PopulateRootNamespace(ObjectRootNamespace root, List <string> namespaces) { //Manually apply the first sub namespace.... ObjectNamespace targetSub = root.SubNamespaces.FirstOrDefault(ns => ns.Name == namespaces[0]); if (targetSub == null) { targetSub = new ObjectNamespace { Name = namespaces[0] }; root.SubNamespaces.Add(targetSub); } //Now recursively apply the namespaces for this object. List <string> adjustedSubNamespaces = namespaces.Skip(1).ToList(); foreach (string subName in adjustedSubNamespaces) { ObjectNamespace newSub = targetSub.SubNamespaces.FirstOrDefault(ns => ns.Name == subName); if (newSub == null) { newSub = new ObjectNamespace { Name = subName }; targetSub.SubNamespaces.Add(newSub); } targetSub = newSub; } }