diff --git a/event-bus-proc/src/main/java/dev/kske/eventbus/proc/EventProcessor.java b/event-bus-proc/src/main/java/dev/kske/eventbus/proc/EventProcessor.java index 355cfd7..fed6f1c 100644 --- a/event-bus-proc/src/main/java/dev/kske/eventbus/proc/EventProcessor.java +++ b/event-bus-proc/src/main/java/dev/kske/eventbus/proc/EventProcessor.java @@ -63,6 +63,10 @@ public class EventProcessor extends AbstractProcessor { else pass = true; + // Warn the user about unused return values + if (useParameter && eventHandler.getReturnType().getKind() != TypeKind.VOID) + warning(eventHandler, "Unused return value"); + // Abort checking if the handler signature is incorrect if (!pass) continue; @@ -80,14 +84,20 @@ public class EventProcessor extends AbstractProcessor { } } + // Detect missing or useless @Polymorphic + boolean polymorphic = eventHandler.getAnnotation(Polymorphic.class) != null; + Element eventElement = ((DeclaredType) eventType).asElement(); + // Check for handlers for abstract types that aren't polymorphic - Element eventElement = ((DeclaredType) eventType).asElement(); - if (eventHandler.getAnnotation(Polymorphic.class) == null - && (eventElement.getKind() == ElementKind.INTERFACE - || eventElement.getModifiers().contains(Modifier.ABSTRACT))) { + if (!polymorphic && (eventElement.getKind() == ElementKind.INTERFACE + || eventElement.getModifiers().contains(Modifier.ABSTRACT))) warning(eventHandler, "Parameter should be instantiable or handler should use @Polymorphic"); - } + + // Check for handlers for final types that are polymorphic + else if (polymorphic && eventElement.getModifiers().contains(Modifier.FINAL)) + warning(eventHandler, + "@Polymorphic should be removed as parameter cannot be subclassed"); } }