/// <summary> /// Load all xml file and convert to List<Type> /// </summary> /// <returns></returns> public static List <Models.Type> LoadTypes(ECMA2Yaml.Models.ECMAStore store) { string xmlFolder = _xmlDataFolder.Replace(_repoRootFolder, "").Trim(Path.DirectorySeparatorChar); var typeFileList = _fileAccessor.ListFiles("*.xml", xmlFolder, allDirectories: true); ConcurrentBag <Models.Type> typeList = new ConcurrentBag <Models.Type>(); ParallelOptions opt = new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }; Parallel.ForEach(typeFileList, opt, typeFile => { XDocument xmlDoc = XDocument.Load(typeFile.AbsolutePath); if (xmlDoc.Root.Name.LocalName == "Type") { Models.Type t = ConvertToType(xmlDoc, store); if (t != null) { typeList.Add(t); } } }); return(typeList.ToList()); }
/// <summary> /// Convert xml node(<Type></Type>) to Type object /// </summary> /// <param name="xmlDoc"></param> /// <returns></returns> private static Models.Type ConvertToType(XDocument xmlDoc, ECMA2Yaml.Models.ECMAStore store) { Models.Type t = new Models.Type(); string docId = GetDocId(xmlDoc.Root, "TypeSignature"); if (!string.IsNullOrEmpty(docId)) { t.DocId = docId; } if (!store.ItemsByDocId.ContainsKey(docId)) { return(null); } if (store.ItemsByDocId.TryGetValue(docId, out var item)) { t.Uid = item.Uid; } var docsEle = new XElement("member"); if (!string.IsNullOrEmpty(t.Uid) && store.InheritDocItemsByUid.Keys.Contains(t.Uid)) { var inheritFromType = store.TypesByUid[t.Uid]; var inheritDocsEle = InheritDocs(inheritFromType.Docs); if (inheritDocsEle != null) { inheritDocsEle.SetAttributeValue("name", docId); docsEle = inheritDocsEle; } } else { SetDocsEle(docsEle, xmlDoc.Root, docId); } t.Docs = docsEle; var AssemblyInfoEleList = xmlDoc.Root.Elements("AssemblyInfo"); if (AssemblyInfoEleList != null) { t.AssemblyInfos = new List <string>(); AssemblyInfoEleList.ToList().ForEach(assemblyInfoEle => { string assemblyName = assemblyInfoEle.Element("AssemblyName")?.Value; var versionEles = assemblyInfoEle.Elements("AssemblyVersion"); if (versionEles != null && versionEles.Count() > 0) { versionEles.ToList().ForEach(assVersion => { t.AssemblyInfos.Add(string.Format("{0}-{1}", assemblyName, assVersion.Value)); }); } }); } if (t.AssemblyInfos.Count() == 0) { return(null); } var memberEleList = xmlDoc.Root.Element("Members")?.Elements("Member"); if (memberEleList != null) { t.Members = new List <Member>(); memberEleList.ToList().ForEach(memberEle => { var m = ConvertToMember(memberEle, store); if (m != null) { t.Members.Add(m); } }); } return(t); }