private IList<PropertyModel> ProcessProperties(Type type, XmlDocument xml) { return type.GetProperties(System.Reflection.BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.SetProperty | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.DeclaredOnly) .Where(m => true).Select(m => new PropertyModel { Name = m.Name, Documentation = xml.GetDocumenation(m), XmlName = m.GetXmlDocumentationName(), IsStatic = m.GetSetMethod() != null ? m.GetSetMethod().IsStatic : m.GetGetMethod() != null ? m.GetGetMethod().IsStatic : false, IsReadOnly = m.GetSetMethod() == null, Parent = type, ReturnType = m.PropertyType }).OrderBy(x => x.Name).ToList(); }
/// <summary> /// Processes the type. /// </summary> /// <param name="type">The type.</param> /// <param name="xml">The XML.</param> /// <returns></returns> private ClassModel ProcessType(Type type, XmlDocument xml) { return new ClassModel { Name = type.ToSafeName(), Namespace = type.Namespace, Assembly = type.Assembly.GetName().Name, Description = type.GetCustomAttributeValue<DescriptionAttribute, String>(x => x.Description).Or(""), XmlName = type.GetXmlDocumentationName(), Documentation = xml.GetDocumenation(type), Methods = ProcessMethods(type, xml), IsStatic = type.IsAbstract && type.IsSealed, Properties = ProcessProperties(type,xml) }; }
/// <summary> /// Processes the methods. /// </summary> /// <param name="type">The type.</param> /// <param name="xml">The XML.</param> /// <returns></returns> private IList<MethodModel> ProcessMethods(Type type, XmlDocument xml) { return type.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.DeclaredOnly).Where(m => !m.IsConstructor && !m.Name.StartsWith("get_", StringComparison.CurrentCulture) && !m.Name.StartsWith("set_", StringComparison.CurrentCulture) && !m.Name.StartsWith("add_", StringComparison.CurrentCulture) && !m.Name.StartsWith("remove_", StringComparison.CurrentCulture) && // exclude overrides because I don't care about them. Unless, base definition is in this assembly. (m.GetBaseDefinition() == null || m.GetBaseDefinition() == m || m.GetBaseDefinition().DeclaringType.Assembly == type.Assembly) ).Select(m => new MethodModel { Name = m.Name, Documentation = xml.GetDocumenation(m), XmlName = m.GetXmlDocumentationName(), GenericParameters = ProcessMethodGenericParameters(m), Parameters = ProcessParams(m), ExtensionOf = m.ExtensionOf(), Parent = type, IsStatic = m.IsStatic, ReturnType = m.ReturnType }).OrderBy(x => x.Name).ThenBy(x => x.ExtensionOf == null ? "" : x.ExtensionOf.ToSafeFullName()).ThenBy(x => x.Parameters.Count).ToList(); }