Merge pull request 'Remove USE_PARAMETER' (#35) from f/remove-use-parameter into develop
zdm/event-bus/pipeline/head This commit looks good Details

Reviewed-on: https://git.kske.dev/zdm/event-bus/pulls/35
Reviewed-by: delvh <leon@kske.dev>
This commit is contained in:
Kai S. K. Engelbart 2022-01-13 14:40:13 +01:00
commit a8d858e8c7
Signed by: Käfer & Engelbart Git
GPG Key ID: 70F2F9206EDC1FCE
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;
// 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;