Remove USE_PARAMETER #35

Merged
kske merged 4 commits from f/remove-use-parameter into develop 2022-01-13 14:40:14 +01:00
6 changed files with 13 additions and 28 deletions

View File

@ -30,13 +30,5 @@ public @interface Event {
* @return the event type accepted by the handler * @return the event type accepted by the handler
* @since 1.0.0 * @since 1.0.0
*/ */
Class<?> value() default USE_PARAMETER.class; Class<?> value() default void.class;
/**
* Signifies that the event type the handler listens to is determined by the type of its only
* parameter.
*
* @since 0.0.3
*/
static final class USE_PARAMETER {}
} }

View File

@ -3,7 +3,6 @@ package dev.kske.eventbus.core.handler;
import java.lang.reflect.*; import java.lang.reflect.*;
import dev.kske.eventbus.core.*; import dev.kske.eventbus.core.*;
import dev.kske.eventbus.core.Event.USE_PARAMETER;
/** /**
* An event handler wrapping a method annotated with {@link Event} and executing it using * An event handler wrapping a method annotated with {@link Event} and executing it using
@ -37,7 +36,7 @@ public final class ReflectiveEventHandler implements EventHandler {
boolean defPolymorphism, int defPriority) throws EventBusException { boolean defPolymorphism, int defPriority) throws EventBusException {
this.listener = listener; this.listener = listener;
this.method = method; this.method = method;
useParameter = annotation.value() == USE_PARAMETER.class; useParameter = annotation.value() == void.class;
delvh marked this conversation as resolved
Review

|| annotation.value == Void.class

`|| annotation.value == Void.class`
Review

That wouldn't be the default type though. Yes, using Void as an event type doesn't make much sense, but it is possible, which isn't the case for void.

That wouldn't be the default type though. Yes, using `Void` as an event type doesn't make much sense, but it is possible, which isn't the case for `void`.
// Check handler signature // Check handler signature
if (method.getParameterCount() == 0 && useParameter) if (method.getParameterCount() == 0 && useParameter)
@ -58,8 +57,9 @@ public final class ReflectiveEventHandler implements EventHandler {
? method.getAnnotation(Priority.class).value() ? method.getAnnotation(Priority.class).value()
: defPriority; : defPriority;
// Allow access if the method is non-public // Try to allow access if the method is not accessible
method.setAccessible(true); if (!method.canAccess(Modifier.isStatic(method.getModifiers()) ? null : listener))
method.setAccessible(true);
} }
@Override @Override

View File

@ -35,6 +35,7 @@ class InheritanceTest extends SimpleEventListenerBase implements SimpleEventList
} }
@Event @Event
@Priority(250)
private void onSimpleEventPrivate(SimpleEvent event) { private void onSimpleEventPrivate(SimpleEvent event) {
assertSame(0, event.getCounter()); assertSame(0, event.getCounter());
event.increment(); event.increment();

View File

@ -16,8 +16,8 @@ abstract class SimpleEventListenerBase {
fail("This handler should not be invoked"); fail("This handler should not be invoked");
} }
@Priority(150)
@Event @Event
@Priority(150)
private void onSimpleEventPrivate(SimpleEvent event) { private void onSimpleEventPrivate(SimpleEvent event) {
assertSame(1, event.getCounter()); assertSame(1, event.getCounter());
event.increment(); event.increment();

View File

@ -47,13 +47,12 @@ public class EventProcessor extends AbstractProcessor {
// Task failed successfully // Task failed successfully
eventType = e.getTypeMirror(); eventType = e.getTypeMirror();
useParameter = processingEnv.getTypeUtils().isSameType(eventType, useParameter = eventType.getKind() == TypeKind.VOID;
getTypeMirror(Event.USE_PARAMETER.class));
} }
// Check handler signature // Check handler signature
boolean pass = false; boolean pass = false;
if (useParameter && eventHandler.getParameters().size() == 0) if (useParameter && eventHandler.getParameters().isEmpty())
error(eventHandler, "The method or the annotation must define the event type"); error(eventHandler, "The method or the annotation must define the event type");
else if (!useParameter && eventHandler.getParameters().size() == 1) else if (!useParameter && eventHandler.getParameters().size() == 1)
error(eventHandler, error(eventHandler,
@ -100,14 +99,15 @@ public class EventProcessor extends AbstractProcessor {
boolean hasListenerPriority = listenerPriority != null; boolean hasListenerPriority = listenerPriority != null;
// Effective polymorphism // Effective polymorphism
boolean polymorphic = boolean polymorphic =
hasListenerPolymorphic ? listenerPolymorphic.value() : defPolymorphic; hasListenerPolymorphic ? listenerPolymorphic.value() : defPolymorphic;
boolean hasHandlerPolymorphic = eventHandler.getAnnotation(Polymorphic.class) != null; boolean hasHandlerPolymorphic = eventHandler.getAnnotation(Polymorphic.class) != null;
if (hasHandlerPolymorphic) if (hasHandlerPolymorphic)
polymorphic = eventHandler.getAnnotation(Polymorphic.class).value(); polymorphic = eventHandler.getAnnotation(Polymorphic.class).value();
// Effective priority // Effective priority
int priority = hasListenerPriority ? listenerPriority.value() : defPriority; int priority =
hasListenerPriority ? listenerPriority.value() : defPriority;
boolean hasHandlerPriority = eventHandler.getAnnotation(Priority.class) != null; boolean hasHandlerPriority = eventHandler.getAnnotation(Priority.class) != null;
if (hasHandlerPriority) if (hasHandlerPriority)
priority = eventHandler.getAnnotation(Priority.class).value(); priority = eventHandler.getAnnotation(Priority.class).value();
@ -137,14 +137,6 @@ public class EventProcessor extends AbstractProcessor {
} }
} }
private TypeMirror getTypeMirror(Class<?> clazz) {
return getTypeElement(clazz).asType();
}
private TypeElement getTypeElement(Class<?> clazz) {
return processingEnv.getElementUtils().getTypeElement(clazz.getCanonicalName());
}
private void warning(Element e, String msg, Object... args) { private void warning(Element e, String msg, Object... args) {
processingEnv.getMessager().printMessage(Kind.WARNING, String.format(msg, args), e); processingEnv.getMessager().printMessage(Kind.WARNING, String.format(msg, args), e);
} }

View File

@ -5,7 +5,7 @@
* @author Kai S. K. Engelbart * @author Kai S. K. Engelbart
* @since 1.0.0 * @since 1.0.0
*/ */
module dev.kske.eventbus.ap { module dev.kske.eventbus.proc {
requires java.compiler; requires java.compiler;
requires dev.kske.eventbus.core; requires dev.kske.eventbus.core;