public static IEnumerable <IDocumentationMember> ReflectMembersForDocumenting(IEnumerable <Type> types) { foreach (var type in types) { if (type.IsSpecialName) { continue; } if (type.Name.StartsWith("__")) { continue; // probably a lambda generated class } yield return(new ReflectedType(IdentifierFor.Type(type), type)); foreach (var method in type.GetMethods()) { if (method.IsSpecialName || (method.DeclaringType != null && method.DeclaringType.Name.Equals("Object"))) { continue; //skip object base methods and special names } yield return(new ReflectedMethod(IdentifierFor.Method(method, type), method, type)); } foreach (var constructor in type.GetConstructors()) { yield return(new ReflectedMethod(IdentifierFor.Method(constructor, type), constructor, type)); } foreach (var property in type.GetProperties(BindingFlags.Static | BindingFlags.Public)) { yield return(new ReflectedProperty(IdentifierFor.Property(property, type, true), property, type, true)); } foreach (var property in type.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { yield return(new ReflectedProperty(IdentifierFor.Property(property, type, false), property, type, false)); } foreach (var ev in type.GetEvents()) { yield return(new ReflectedEvent(IdentifierFor.Event(ev, type), ev, type)); } if (type.IsEnum) { foreach (var member in type.GetMembers(BindingFlags.Static | BindingFlags.Public)) { yield return(new ReflectedEnum(IdentifierFor.Enum(member, type), member, type)); } } else { foreach (var field in type.GetFields()) { yield return(new ReflectedField(IdentifierFor.Field(field, type), field, type)); } } } }
private IDocumentationMember find_member <T>(Expression <Func <T, object> > propertyOrField) { var member = ((MemberExpression)propertyOrField.Body).Member; if (member is PropertyInfo) { return(members.FirstOrDefault(x => x.Name == IdentifierFor.Property((PropertyInfo)member, typeof(T)))); } return(members.FirstOrDefault(x => x.Name == IdentifierFor.Field((FieldInfo)member, typeof(T)))); }
public void should_match_property() { var undocumentedMembers = DocumentableMemberFinder.ReflectMembersForDocumenting(new[] { typeof(First), typeof(Second), typeof(Third) }); var snippets = new[] { @"<member name=""P:Example.Second.SecondProperty"" />".ToNode() }; var members = DocumentationXmlMatcher.MatchDocumentationToMembers(undocumentedMembers, snippets); var property = Property <Second>(x => x.SecondProperty); var member = members.FirstOrDefault(x => x.Name == IdentifierFor.Property(property, typeof(Second))) as DocumentedProperty; member.ShouldNotBeNull(); member.Xml.ShouldEqual(snippets[0]); member.Property.ShouldEqual <Second>(x => x.SecondProperty); }
public static IEnumerable <IDocumentationMember> ReflectMembersForDocumenting(IEnumerable <Type> types) { foreach (var type in types) { if (type.IsSpecialName) { continue; } if (type.Name.StartsWith("__")) { continue; // probably a lambda generated class } yield return(new ReflectedType(IdentifierFor.Type(type), type)); foreach (var method in type.GetMethods()) { if (method.IsSpecialName) { continue; } yield return(new ReflectedMethod(IdentifierFor.Method(method, type), method, type)); } foreach (var constructor in type.GetConstructors()) { yield return(new ReflectedMethod(IdentifierFor.Method(constructor, type), constructor, type)); } foreach (var property in type.GetProperties()) { yield return(new ReflectedProperty(IdentifierFor.Property(property, type), property, type)); } foreach (var ev in type.GetEvents()) { yield return(new ReflectedEvent(IdentifierFor.Event(ev, type), ev, type)); } foreach (var field in type.GetFields()) { yield return(new ReflectedField(IdentifierFor.Field(field, type), field, type)); } } }
public void Add(List <Namespace> namespaces, DocumentedProperty association) { if (association.Property == null) { return; } DeclaredType type = FindType(association, namespaces); var isStatic = association.Property.GetGetMethod().IsStatic; DeclaredType propertyReturnType = DeclaredType.Unresolved( IdentifierFor.Type(association.Property.PropertyType), association.Property.PropertyType, Namespace.Unresolved(IdentifierFor.Namespace(association.Property.PropertyType.Namespace))); Property doc = Property.Unresolved( IdentifierFor.Property(association.Property, association.TargetType, isStatic), type, association.Property, propertyReturnType); ParseSummary(association, doc); ParseValue(association, doc); ParseRemarks(association, doc); ParseExample(association, doc); if (_matchedAssociations.ContainsKey(association.Name)) { return; } _matchedAssociations.Add(association.Name, doc); if (type == null) { return; } type.AddProperty(doc); }
protected DocumentedProperty Property <T>(string xml, Expression <Func <T, object> > propertyAction) { var property = ((MemberExpression)propertyAction.Body).Member as PropertyInfo; return(new DocumentedProperty(IdentifierFor.Property(property, typeof(T)), xml.ToNode(), property, typeof(T))); }
protected static Property Property <T>(string name) { return(new Property(IdentifierFor.Property(typeof(T).GetProperty(name), typeof(T)), Type <T>())); }
public static Property property_for <T>(this T instance, Expression <Func <T, object> > property_signature) { return(new Property(IdentifierFor.Property(Property(property_signature), typeof(T)), null)); }