Exemplo n.º 1
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 || (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))));
        }
Exemplo n.º 3
0
        public void ShouldHaveEventsInTypes()
        {
            var model   = new DocumentationModelBuilder(StubParser, new EventAggregator());
            var members = new IDocumentationMember[]
            {
                Type <Second>(@"<member name=""T:Example.Second"" />"),
                Field <Second>(@"<member name=""F:Example.Second.aField"" />", x => x.aField),
            };
            var namespaces = model.CombineToTypeHierarchy(members);
            var field      = Field <Second>(x => x.aField);

            namespaces[0].Types[0].Fields
            .ShouldContain(x => x.IsIdentifiedBy(IdentifierFor.Field(field, typeof(Second))));
        }
Exemplo n.º 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));
                }
            }
        }
Exemplo n.º 5
0
        public void Add(List <Namespace> namespaces, DocumentedField association)
        {
            if (association.Field == null)
            {
                return;
            }

            DeclaredType type = FindType(association, namespaces);

            DeclaredType returnType = DeclaredType.Unresolved(
                IdentifierFor.Type(association.Field.FieldType),
                association.Field.FieldType,
                Namespace.Unresolved(IdentifierFor.Namespace(association.Field.FieldType.Namespace)));
            Field doc = Field.Unresolved(
                IdentifierFor.Field(association.Field, association.TargetType), type, returnType);

            ParseSummary(association, doc);
            ParseRemarks(association, doc);
            ParseExample(association, doc);

            _matchedAssociations.Add(association.Name, doc);
            type.AddField(doc);
        }
        protected DocumentedField Field <T>(string xml, Expression <Func <T, object> > fieldAction)
        {
            var field = ((MemberExpression)fieldAction.Body).Member as FieldInfo;

            return(new DocumentedField(IdentifierFor.Field(field, typeof(T)), xml.ToNode(), field, typeof(T)));
        }
 protected static Field Field <T>(string name)
 {
     return(new Field(IdentifierFor.Field(typeof(T).GetField(name), typeof(T)), Type <T>()));
 }