From b56f08e4412bd84adc0062316183fa4e51421e3f Mon Sep 17 00:00:00 2001 From: kske Date: Thu, 18 Feb 2021 22:18:13 +0100 Subject: [PATCH] Warn about unnecessarily polymorphic event handlers When Event Bus Proc detects a handler for a final type that uses the @Polymorphic annotation, it issues a warning. --- .../dev/kske/eventbus/proc/EventProcessor.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) 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..9d9122c 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 @@ -80,14 +80,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"); } }