private void ProcessMethod(MethodBase method) { var elements = new List <XmlElement>(); var annotations = GetAnnotationAttributes(method).ToArray(); if (annotations.Any()) { foreach (var annotation in annotations) { elements.Add(this.CreateElementForAnnotation(annotation)); } } foreach (var parameter in method.GetParameters()) { var element = this.CreateParameterElement(parameter); if (element != null) { elements.Add(element); } } if (elements.Any()) { var id = XmlDocIdGenerator.GetId(method); var element = this._rootElement.OwnerDocument !.CreateElement("member"); element.SetAttribute("name", id); elements.ForEach(x => element.AppendChild(x)); this._rootElement.AppendChild(element); } }
private XmlElement CreateElementForAnnotation(CustomAttributeData annotation) { var result = this.Document.CreateElement("attribute"); result.SetAttribute("ctor", XmlDocIdGenerator.GetId(annotation.Constructor)); foreach (var argument in annotation.ConstructorArguments) { var argElement = this.Document.CreateElement("argument"); if (argument.Value is string str) { argElement.InnerText = str; } else { argElement.InnerText = argument.Value?.ToString() ?? ""; } result.AppendChild(argElement); } return(result); }