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