/// <summary> /// Consumes type members including fields, properties, methods and events. /// </summary> /// <param name="typeScope">The scope to be used as the containing scope.</param> /// <param name="type">The type whose members are to be consumed.</param> protected void ConsumeMembers(IPatternScope typeScope, ITypeInfo type) { BindingFlags bindingFlags = GetMemberBindingFlags(type); // TODO: We should probably process groups of members in sorted order working outwards // from the base type, like an onion. foreach (IFieldInfo field in CodeElementSorter.SortMembersByDeclaringType(type.GetFields(bindingFlags))) { typeScope.Consume(field, false, DefaultFieldPattern); } foreach (IPropertyInfo property in CodeElementSorter.SortMembersByDeclaringType(type.GetProperties(bindingFlags))) { typeScope.Consume(property, false, DefaultPropertyPattern); } foreach (IMethodInfo method in CodeElementSorter.SortMembersByDeclaringType(type.GetMethods(bindingFlags))) { typeScope.Consume(method, false, DefaultMethodPattern); } foreach (IEventInfo @event in CodeElementSorter.SortMembersByDeclaringType(type.GetEvents(bindingFlags))) { typeScope.Consume(@event, false, DefaultEventPattern); } }
public void SortMembersByDeclaringType() { List <IMethodInfo> members = new List <IMethodInfo>(); members.Add(Reflector.Wrap(typeof(A).GetMethod("MemberA"))); members.Add(Reflector.Wrap(typeof(C).GetMethod("MemberC"))); members.Add(Reflector.Wrap(typeof(B).GetMethod("MemberB"))); IList <IMethodInfo> sortedMembers = CodeElementSorter.SortMembersByDeclaringType(members); Assert.AreElementsEqual(new IMethodInfo[] { members[0], members[2], members[1] }, sortedMembers); }