Ejemplo n.º 1
0
    private EventDefinition ExposeEvent(TypeDefinition typeToProcess, FieldReference fieldToProcess, EventDefinition eventToExpose, ExposeMode exposeMode)
    {
        var typeToExpose        = fieldToProcess.FieldType;
        var genericTypeToExpose = typeToExpose as GenericInstanceType;

        var eventToExposeType = genericTypeToExpose == null ? eventToExpose.EventType : eventToExpose.ResolveGenericEventType(genericTypeToExpose.GenericArguments);

        var name   = exposeMode == ExposeMode.ImplementExplicit ? typeToExpose.FullName + "." + eventToExpose.Name : eventToExpose.Name;
        var @event = new EventDefinition(name, EventAttributes.None, eventToExposeType);

        var existingEvent = typeToProcess.GetEventLike(@event);

        if (existingEvent != null)
        {
            return(existingEvent);
        }

        if (eventToExpose.AddMethod != null && eventToExpose.AddMethod.IsPublic)
        {
            var addMethod = ExposeMethod(typeToProcess, fieldToProcess, eventToExpose.AddMethod, exposeMode, MethodSemanticsAttributes.AddOn);
            addMethod.SemanticsAttributes = MethodSemanticsAttributes.AddOn;
            @event.AddMethod = addMethod;
        }

        if (eventToExpose.RemoveMethod != null && eventToExpose.RemoveMethod.IsPublic)
        {
            var removeMethod = ExposeMethod(typeToProcess, fieldToProcess, eventToExpose.RemoveMethod, exposeMode, MethodSemanticsAttributes.RemoveOn);
            removeMethod.SemanticsAttributes = MethodSemanticsAttributes.RemoveOn;
            @event.RemoveMethod = removeMethod;
        }

        AddFodyGeneratedAttributes(@event);
        typeToProcess.Events.Add(@event);
        return(@event);
    }
Ejemplo n.º 2
0
	private EventDefinition ExposeEvent(TypeDefinition typeToProcess, FieldReference fieldToProcess, EventDefinition eventToExpose, ExposeMode exposeMode)
	{
		var typeToExpose = fieldToProcess.FieldType;
		var genericTypeToExpose = typeToExpose as GenericInstanceType;

		var eventToExposeType = genericTypeToExpose == null ? eventToExpose.EventType : eventToExpose.ResolveGenericEventType(genericTypeToExpose.GenericArguments);

		var name = exposeMode == ExposeMode.ImplementExplicit ? typeToExpose.FullName + "." + eventToExpose.Name : eventToExpose.Name;
		var @event = new EventDefinition(name, EventAttributes.None, eventToExposeType);

		var existingEvent = typeToProcess.GetEventLike(@event);
		if (existingEvent != null)
			return existingEvent;

		if (eventToExpose.AddMethod != null && eventToExpose.AddMethod.IsPublic)
		{
			var addMethod = ExposeMethod(typeToProcess, fieldToProcess, eventToExpose.AddMethod, exposeMode, MethodSemanticsAttributes.AddOn);
			addMethod.SemanticsAttributes = MethodSemanticsAttributes.AddOn;
			@event.AddMethod = addMethod;
		}

		if (eventToExpose.RemoveMethod != null && eventToExpose.RemoveMethod.IsPublic)
		{
			var removeMethod = ExposeMethod(typeToProcess, fieldToProcess, eventToExpose.RemoveMethod, exposeMode, MethodSemanticsAttributes.RemoveOn);
			removeMethod.SemanticsAttributes = MethodSemanticsAttributes.RemoveOn;
			@event.RemoveMethod = removeMethod;
		}

		AddFodyGeneratedAttributes(@event);
		typeToProcess.Events.Add(@event);
		return @event;
	}