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);
        }
Beispiel #4
0
        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));
                }
            }
        }
Beispiel #5
0
        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>()));
 }
Beispiel #8
0
 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));
 }