public MemberDefinitionBuilder(ClassDefinitionBase classDefinition, Predicate <MethodInfo> methodFilter) { ArgumentUtility.CheckNotNull("classDefinition", classDefinition); ArgumentUtility.CheckNotNull("methodFilter", methodFilter); _classDefinition = classDefinition; _methodFilter = methodFilter; }
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); }
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); }
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)); }