Example #1
0
 internal void Add(MethodDescriptor method)
 {
     _methods[method.FullName] = method;
 }
Example #2
0
        private void InitMembers()
        {
            foreach (XmlNode xmlNode in _xmlDoc)
            {
                if (xmlNode.NodeType == XmlNodeType.Comment || xmlNode.Name != "member")
                {
                    continue;
                }
                var name = xmlNode.Attributes["name"]?.Value.Trim();
                if (name == null)
                {
                    continue;
                }
                var prefix   = name[0];
                var typeName = name.Substring(2);
                var fullName = typeName;
                var summary  = xmlNode.GetInnerXml("summary");
                switch (prefix)
                {
                case 'T':
                {
                    if (!_members.TryGetValue(typeName, out var type))
                    {
                        type = new TypeDescriptor(fullName, summary);
                        _members[type.FullName] = type;
                    }
                    else
                    {
                        type.Summary ??= summary;
                    }
                    type.Assembly = this;
                }
                break;

                case 'P':
                case 'F':
                {
                    var index = typeName.LastIndexOf('.');
                    name     = typeName.Substring(index + 1);
                    typeName = typeName.Substring(0, index);
                    if (!_members.TryGetValue(typeName, out var ptype))
                    {
                        throw new NullReferenceException($"类型{typeName}不能为空!");
                    }
                    ptype.IsEnum = prefix == 'F';
                    ptype.Add(new PropertyDescriptor(ptype, name, summary, fullName));
                }
                break;

                case 'M':
                {
                    var index = typeName.IndexOf('(');
                    if (index != -1)
                    {
                        typeName = typeName.Substring(0, index);
                    }
                    index    = typeName.LastIndexOf('.');
                    name     = typeName.Substring(index + 1);
                    typeName = typeName.Substring(0, index);
                    if (!_members.TryGetValue(typeName, out var mtype))
                    {
                        mtype = new TypeDescriptor(typeName, null);
                        _members[mtype.FullName] = mtype;
                    }
                    var method = new MethodDescriptor(mtype, name, summary, fullName);
                    mtype.Add(method);
                    var @params = xmlNode.SelectNodes("param");
                    foreach (XmlNode param in @params)
                    {
                        if (param.NodeType == XmlNodeType.Comment)
                        {
                            continue;
                        }
                        method.Add(new ParameterDescriptor(null, param.Attributes["name"]?.Value.Trim(), method, param.InnerXml.Trim()));
                    }

                    var returns = xmlNode.SelectSingleNode("returns");
                    if (returns != null)
                    {
                        method.Returns = new ReturnDescriptor(null, method, returns.InnerXml.Trim());
                    }
                }
                break;
                }
            }
        }