Remove USE_PARAMETER #35
@ -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 {}
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
|||||||
|
|
||||||
// Check handler signature
|
// Check handler signature
|
||||||
if (method.getParameterCount() == 0 && useParameter)
|
if (method.getParameterCount() == 0 && useParameter)
|
||||||
@ -58,7 +57,8 @@ 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
|
||||||
|
if (!method.canAccess(Modifier.isStatic(method.getModifiers()) ? null : listener))
|
||||||
method.setAccessible(true);
|
method.setAccessible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
@ -107,7 +106,8 @@ public class EventProcessor extends AbstractProcessor {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user
|| annotation.value == Void.class
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 forvoid
.