/// <summary> /// Returns the properties defined on the given type. /// </summary> /// <param name="type">The type for which to return the properties.</param> /// <returns></returns> public IEnumerable <PropertyDocumentation> GetProperties(TypeDocumentation type) { var fullName = type.Member.FullName; var nodes = this.Document.DocumentElement.SelectNodes($"members/member[starts-with(@name, 'P:{fullName}.')]"); foreach (XmlNode node in nodes) { var nameAttribute = node.Attributes["name"].Value; var name = nameAttribute; if (name.Contains('(')) { name = name.Substring(0, name.IndexOf('(')); } name = name.Substring(name.LastIndexOf('.') + 1); var prop = type.Member.GetProperties().Where(x => x.Name == name).Where(x => x.DeclaringType == type.Member).FirstOrDefault(); if (null != prop) { yield return(new PropertyDocumentation(node, prop)); } } yield break; }
/// <summary> /// Returns the methods for the given <paramref name="type"/>. /// </summary> /// <param name="type">The type for which to return the methods.</param> public IEnumerable <MethodDocumentation> GetMethods(TypeDocumentation type) { if (null == type) { throw new ArgumentNullException(nameof(type)); } var nodes = this.Document.DocumentElement.SelectNodes($"members/member[starts-with(@name, 'M:{type.Member.FullName}.')]"); foreach (XmlNode node in nodes) { MethodBase method = null; var cref = new CRef(node.Attributes["name"].Value); if (cref.IsMethod) { method = cref.ToMethod(); } if (null != method) { yield return(new MethodDocumentation(node, method)); } } yield break; }
/// <summary> /// Returns the events for the given type. /// </summary> /// <param name="type">The type to return the events for.</param> public IEnumerable <EventDocumentation> GetEvents(TypeDocumentation type) { var nodes = this.Document.DocumentElement.SelectNodes($"members/member[starts-with(@name, 'E:{type.Member.FullName}.')]"); foreach (XmlNode node in nodes) { var nameAttribute = node.Attributes["name"].Value; var name = nameAttribute.Substring(nameAttribute.LastIndexOf('.') + 1); var eInfo = type.Member.GetEvent(name); if (null != eInfo) { yield return(new EventDocumentation(node, eInfo)); } } yield break; }
/// <summary> /// Returns the member documentation for the given type. /// </summary> /// <param name="type">The type to return the members for.</param> public IEnumerable <MemberDocumentation> GetMembers(TypeDocumentation type) { foreach (var m in this.GetFields(type)) { yield return(m); } foreach (var m in this.GetProperties(type)) { yield return(m); } foreach (var m in this.GetMethods(type)) { yield return(m); } foreach (var m in this.GetEvents(type)) { yield return(m); } }