public MemberDefinitionBuilder(ClassDefinitionBase classDefinition, Predicate <MethodInfo> methodFilter)
        {
            ArgumentUtility.CheckNotNull("classDefinition", classDefinition);
            ArgumentUtility.CheckNotNull("methodFilter", methodFilter);

            _classDefinition = classDefinition;
            _methodFilter    = methodFilter;
        }
Example #2
0
        public static MethodDefinition CreateMethodDefinition(ClassDefinitionBase declaringClass, MethodInfo methodInfo)
        {
            ArgumentUtility.CheckNotNull("declaringClass", declaringClass);
            ArgumentUtility.CheckNotNull("methodInfo", methodInfo);

            var methodDefinition = new MethodDefinition(methodInfo, declaringClass);

            PrivateInvoke.InvokeNonPublicMethod(declaringClass.Methods, "Add", methodDefinition);
            return(methodDefinition);
        }
Example #3
0
        public static EventDefinition CreateEventDefinition(ClassDefinitionBase declaringClass, EventInfo eventInfo)
        {
            ArgumentUtility.CheckNotNull("declaringClass", declaringClass);
            ArgumentUtility.CheckNotNull("eventInfo", eventInfo);

            var addMethod       = eventInfo.GetAddMethod(true) != null ? new MethodDefinition(eventInfo.GetAddMethod(true), declaringClass) : null;
            var removeMethod    = eventInfo.GetRemoveMethod(true) != null ? new MethodDefinition(eventInfo.GetRemoveMethod(true), declaringClass) : null;
            var eventDefinition = new EventDefinition(eventInfo, declaringClass, addMethod, removeMethod);

            PrivateInvoke.InvokeNonPublicMethod(declaringClass.Events, "Add", eventDefinition);
            return(eventDefinition);
        }
Example #4
0
        public static PropertyDefinition CreatePropertyDefinition(ClassDefinitionBase declaringClass, PropertyInfo propertyInfo)
        {
            ArgumentUtility.CheckNotNull("declaringClass", declaringClass);
            ArgumentUtility.CheckNotNull("propertyInfo", propertyInfo);

            var getMethod          = propertyInfo.CanRead ? new MethodDefinition(propertyInfo.GetGetMethod(true), declaringClass) : null;
            var setMethod          = propertyInfo.CanWrite ? new MethodDefinition(propertyInfo.GetSetMethod(true), declaringClass) : null;
            var propertyDefinition = new PropertyDefinition(propertyInfo, declaringClass, getMethod, setMethod);

            PrivateInvoke.InvokeNonPublicMethod(declaringClass.Properties, "Add", propertyDefinition);
            return(propertyDefinition);
        }
        private static void CheckRequiredMethods(RequirementDefinitionBase requirement, ClassDefinitionBase implementer, string memberPrefix)
        {
            BindingFlags bf = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

            Assert.That(requirement.Methods.Count, Is.EqualTo(5));

            RequiredMethodDefinition method = requirement.Methods[typeof(IMixinRequiringAllMembersRequirements).GetMethod("Method", bf)];

            Assert.That(method, Is.Not.Null);
            Assert.That(method.InterfaceMethod, Is.EqualTo(typeof(IMixinRequiringAllMembersRequirements).GetMethod("Method", bf)));
            Assert.That(method.ImplementingMethod, Is.SameAs(implementer.Methods[implementer.Type.GetMethod(memberPrefix + "Method", bf)]));

            RequiredMethodDefinition propertyGetter = requirement.Methods[typeof(IMixinRequiringAllMembersRequirements).GetMethod("get_Property", bf)];

            Assert.That(propertyGetter, Is.Not.Null);
            Assert.That(propertyGetter.InterfaceMethod, Is.EqualTo(typeof(IMixinRequiringAllMembersRequirements).GetMethod("get_Property", bf)));
            Assert.That(propertyGetter.ImplementingMethod, Is.SameAs(implementer.Properties[implementer.Type.GetProperty(memberPrefix + "Property", bf)].GetMethod));

            RequiredMethodDefinition propertySetter = requirement.Methods[typeof(IMixinRequiringAllMembersRequirements).GetMethod("set_Property", bf)];

            Assert.That(propertySetter, Is.Not.Null);
            Assert.That(propertySetter.InterfaceMethod, Is.EqualTo(typeof(IMixinRequiringAllMembersRequirements).GetMethod("set_Property", bf)));
            Assert.That(propertySetter.ImplementingMethod, Is.SameAs(implementer.Properties[implementer.Type.GetProperty(memberPrefix + "Property", bf)].SetMethod));

            RequiredMethodDefinition eventAdder = requirement.Methods[typeof(IMixinRequiringAllMembersRequirements).GetMethod("add_Event", bf)];

            Assert.That(eventAdder, Is.Not.Null);
            Assert.That(eventAdder.InterfaceMethod, Is.EqualTo(typeof(IMixinRequiringAllMembersRequirements).GetMethod("add_Event", bf)));
            Assert.That(eventAdder.ImplementingMethod, Is.SameAs(implementer.Events[implementer.Type.GetEvent(memberPrefix + "Event", bf)].AddMethod));

            RequiredMethodDefinition eventRemover = requirement.Methods[typeof(IMixinRequiringAllMembersRequirements).GetMethod("remove_Event", bf)];

            Assert.That(eventRemover, Is.Not.Null);
            Assert.That(eventRemover.InterfaceMethod, Is.EqualTo(typeof(IMixinRequiringAllMembersRequirements).GetMethod("remove_Event", bf)));
            Assert.That(eventRemover.ImplementingMethod, Is.SameAs(implementer.Events[implementer.Type.GetEvent(memberPrefix + "Event", bf)].RemoveMethod));
        }