private void UseExplicitImplementationForHandlerMethod(MethodMetadata handlerMethod) { if (handlerMethod != null) { handlerMethod.UseExplicitInterfaceImplementation(); } }
public DuckTypePropertyMetadata( PropertyInfo property, PropertyInfo targetProperty, MethodMetadata getMethod, MethodMetadata setMethod) : base(property, getMethod, setMethod) { _targetProperty = targetProperty; }
public NonTargetedMethodGenerator( MethodMetadata methodMetadata, FieldBuilder dispatcherField, FieldBuilder methodInfoField) { _methodMetadata = methodMetadata; _dispatcherField = dispatcherField; _methodInfoField = methodInfoField; }
public DuckTypeEventMetadata( EventInfo @event, EventInfo targetEvent, MethodMetadata addHandlerMethod, MethodMetadata removeHandlerMethod, MethodMetadata raiseHandlerMethod) : base(@event, addHandlerMethod, removeHandlerMethod, raiseHandlerMethod) { _targetEvent = targetEvent; }
public EventMetadata( EventInfo eventInfo, MethodMetadata addHandlerMethod, MethodMetadata removeHandlerMethod, MethodMetadata raiseHandlerMethod) : base(eventInfo) { _eventInfo = eventInfo; _addHandlerMethod = addHandlerMethod; _removeHandlerMethod = removeHandlerMethod; _raiseHandlerMethod = raiseHandlerMethod; _eventAttributes = _eventInfo.Attributes; }
public PropertyMetadata( PropertyInfo propertyInfo, MethodMetadata getMethod, MethodMetadata setMethod) : base(propertyInfo) { _propertyInfo = propertyInfo; _getMethod = getMethod; _setMethod = setMethod; _indexerTypes = GetIndexerTypes(_propertyInfo); _propertyAttributes = propertyInfo.Attributes; }
public TypeMetadata( string name, Type baseType, Type[] interfaces, DispatcherFieldMetadata dispatcherField, FieldMetadata[] fields, ConstructorMetadata[] constructors, MethodMetadata[] methods, PropertyMetadata[] properties, EventMetadata[] events, TargetMetadata[] targets) { _name = name; _baseType = baseType; _interfaces = interfaces; _dispatcherField = dispatcherField; _fields = fields; _constructors = constructors; _methods = methods; _properties = properties; _events = events; _targets = targets; }
protected static MethodBuilder GenerateMethod( TypeBuilder typeBuilder, MethodMetadata methodMetadata, FieldBuilder dispatcherField, FieldBuilder methodInfoField, MethodInfo targetMethod) { var method = methodMetadata.Method; var parameters = method.GetParameters(); var parameterCount = parameters.Length; var methodBuilder = typeBuilder.DefineMethod( methodMetadata.Name, methodMetadata.MethodAttributes, methodMetadata.ReturnType, methodMetadata.ParameterTypes); if (method.IsGenericMethodDefinition) { CloneGenericMethodArguments(method, methodBuilder); } for (var i = 0; i < parameterCount; i++) { methodBuilder.DefineParameter(i + 1, parameters[i].Attributes, parameters[i].Name); } var il = methodBuilder.GetILGenerator(); var args = il.DeclareLocal(typeof(object[])); LocalBuilder returnValue = null; if (method.ReturnType != typeof(void)) { returnValue = il.DeclareLocal(method.ReturnType); } new InitializeOutArgumentsStatement(parameters).Emit(il); new StoreLocalStatement( args, new CreateArrayExpression(typeof(object), parameterCount) ).Emit(il); new InitializeInvokerArgumentArrayStatement(args, parameters).Emit(il); new InvokeDispatcherMethodStatement( dispatcherField, methodInfoField, method, args, returnValue, targetMethod ).Emit(il); new StoreOutArgumentsStatement(args, parameters).Emit(il); if (method.ReturnType == typeof(void)) { new ReturnStatement().Emit(il); } else { new ReturnStatement(new LoadLocalExpression(returnValue)).Emit(il); } return methodBuilder; }