From dcc578076a927f343bace373b59511482b933499 Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 8 Feb 2021 18:49:37 +0100 Subject: [PATCH 1/8] Move project to subdirectory, adjust .gitignore --- .gitignore | 7 +++++-- .classpath => event-bus/.classpath | 0 .project => event-bus/.project | 0 pom.xml => event-bus/pom.xml | 0 .../src}/main/java/dev/kske/eventbus/Event.java | 0 .../src}/main/java/dev/kske/eventbus/EventBus.java | 0 .../main/java/dev/kske/eventbus/EventBusException.java | 0 .../src}/main/java/dev/kske/eventbus/EventHandler.java | 0 .../src}/main/java/dev/kske/eventbus/EventListener.java | 0 .../src}/main/java/dev/kske/eventbus/IEvent.java | 0 .../src}/main/java/dev/kske/eventbus/package-info.java | 0 {src => event-bus/src}/main/java/module-info.java | 0 .../src}/test/java/dev/kske/eventbus/CancelTest.java | 0 .../src}/test/java/dev/kske/eventbus/DispatchTest.java | 0 .../src}/test/java/dev/kske/eventbus/SimpleEvent.java | 0 .../src}/test/java/dev/kske/eventbus/SimpleEventSub.java | 0 16 files changed, 5 insertions(+), 2 deletions(-) rename .classpath => event-bus/.classpath (100%) rename .project => event-bus/.project (100%) rename pom.xml => event-bus/pom.xml (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/Event.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/EventBus.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/EventBusException.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/EventHandler.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/EventListener.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/IEvent.java (100%) rename {src => event-bus/src}/main/java/dev/kske/eventbus/package-info.java (100%) rename {src => event-bus/src}/main/java/module-info.java (100%) rename {src => event-bus/src}/test/java/dev/kske/eventbus/CancelTest.java (100%) rename {src => event-bus/src}/test/java/dev/kske/eventbus/DispatchTest.java (100%) rename {src => event-bus/src}/test/java/dev/kske/eventbus/SimpleEvent.java (100%) rename {src => event-bus/src}/test/java/dev/kske/eventbus/SimpleEventSub.java (100%) diff --git a/.gitignore b/.gitignore index 731eb43..6cfda9f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ -/target/ -/.settings/ +# Maven build directories +target/ + +# Eclipse settings directories +.settings/ diff --git a/.classpath b/event-bus/.classpath similarity index 100% rename from .classpath rename to event-bus/.classpath diff --git a/.project b/event-bus/.project similarity index 100% rename from .project rename to event-bus/.project diff --git a/pom.xml b/event-bus/pom.xml similarity index 100% rename from pom.xml rename to event-bus/pom.xml diff --git a/src/main/java/dev/kske/eventbus/Event.java b/event-bus/src/main/java/dev/kske/eventbus/Event.java similarity index 100% rename from src/main/java/dev/kske/eventbus/Event.java rename to event-bus/src/main/java/dev/kske/eventbus/Event.java diff --git a/src/main/java/dev/kske/eventbus/EventBus.java b/event-bus/src/main/java/dev/kske/eventbus/EventBus.java similarity index 100% rename from src/main/java/dev/kske/eventbus/EventBus.java rename to event-bus/src/main/java/dev/kske/eventbus/EventBus.java diff --git a/src/main/java/dev/kske/eventbus/EventBusException.java b/event-bus/src/main/java/dev/kske/eventbus/EventBusException.java similarity index 100% rename from src/main/java/dev/kske/eventbus/EventBusException.java rename to event-bus/src/main/java/dev/kske/eventbus/EventBusException.java diff --git a/src/main/java/dev/kske/eventbus/EventHandler.java b/event-bus/src/main/java/dev/kske/eventbus/EventHandler.java similarity index 100% rename from src/main/java/dev/kske/eventbus/EventHandler.java rename to event-bus/src/main/java/dev/kske/eventbus/EventHandler.java diff --git a/src/main/java/dev/kske/eventbus/EventListener.java b/event-bus/src/main/java/dev/kske/eventbus/EventListener.java similarity index 100% rename from src/main/java/dev/kske/eventbus/EventListener.java rename to event-bus/src/main/java/dev/kske/eventbus/EventListener.java diff --git a/src/main/java/dev/kske/eventbus/IEvent.java b/event-bus/src/main/java/dev/kske/eventbus/IEvent.java similarity index 100% rename from src/main/java/dev/kske/eventbus/IEvent.java rename to event-bus/src/main/java/dev/kske/eventbus/IEvent.java diff --git a/src/main/java/dev/kske/eventbus/package-info.java b/event-bus/src/main/java/dev/kske/eventbus/package-info.java similarity index 100% rename from src/main/java/dev/kske/eventbus/package-info.java rename to event-bus/src/main/java/dev/kske/eventbus/package-info.java diff --git a/src/main/java/module-info.java b/event-bus/src/main/java/module-info.java similarity index 100% rename from src/main/java/module-info.java rename to event-bus/src/main/java/module-info.java diff --git a/src/test/java/dev/kske/eventbus/CancelTest.java b/event-bus/src/test/java/dev/kske/eventbus/CancelTest.java similarity index 100% rename from src/test/java/dev/kske/eventbus/CancelTest.java rename to event-bus/src/test/java/dev/kske/eventbus/CancelTest.java diff --git a/src/test/java/dev/kske/eventbus/DispatchTest.java b/event-bus/src/test/java/dev/kske/eventbus/DispatchTest.java similarity index 100% rename from src/test/java/dev/kske/eventbus/DispatchTest.java rename to event-bus/src/test/java/dev/kske/eventbus/DispatchTest.java diff --git a/src/test/java/dev/kske/eventbus/SimpleEvent.java b/event-bus/src/test/java/dev/kske/eventbus/SimpleEvent.java similarity index 100% rename from src/test/java/dev/kske/eventbus/SimpleEvent.java rename to event-bus/src/test/java/dev/kske/eventbus/SimpleEvent.java diff --git a/src/test/java/dev/kske/eventbus/SimpleEventSub.java b/event-bus/src/test/java/dev/kske/eventbus/SimpleEventSub.java similarity index 100% rename from src/test/java/dev/kske/eventbus/SimpleEventSub.java rename to event-bus/src/test/java/dev/kske/eventbus/SimpleEventSub.java From 9701e862df18a73b18bbaed580f2c92481e912a6 Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 8 Feb 2021 19:30:37 +0100 Subject: [PATCH 2/8] Add parent project, convert existing project to Maven module --- .project | 17 +++++++++ event-bus-ap/.classpath | 38 +++++++++++++++++++ {event-bus => event-bus-ap}/.project | 2 +- event-bus-ap/pom.xml | 16 ++++++++ {event-bus => event-bus-core}/.classpath | 0 event-bus-core/.project | 23 +++++++++++ event-bus-core/pom.xml | 23 +++++++++++ .../main/java/dev/kske/eventbus/Event.java | 0 .../main/java/dev/kske/eventbus/EventBus.java | 0 .../dev/kske/eventbus/EventBusException.java | 0 .../java/dev/kske/eventbus/EventHandler.java | 0 .../java/dev/kske/eventbus/EventListener.java | 0 .../main/java/dev/kske/eventbus/IEvent.java | 0 .../java/dev/kske/eventbus/package-info.java | 0 .../src/main/java/module-info.java | 0 .../java/dev/kske/eventbus/CancelTest.java | 0 .../java/dev/kske/eventbus/DispatchTest.java | 0 .../java/dev/kske/eventbus/SimpleEvent.java | 0 .../dev/kske/eventbus/SimpleEventSub.java | 0 event-bus/pom.xml => pom.xml | 21 +++++----- 20 files changed, 127 insertions(+), 13 deletions(-) create mode 100644 .project create mode 100644 event-bus-ap/.classpath rename {event-bus => event-bus-ap}/.project (95%) create mode 100644 event-bus-ap/pom.xml rename {event-bus => event-bus-core}/.classpath (100%) create mode 100644 event-bus-core/.project create mode 100644 event-bus-core/pom.xml rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/Event.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/EventBus.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/EventBusException.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/EventHandler.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/EventListener.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/IEvent.java (100%) rename {event-bus => event-bus-core}/src/main/java/dev/kske/eventbus/package-info.java (100%) rename {event-bus => event-bus-core}/src/main/java/module-info.java (100%) rename {event-bus => event-bus-core}/src/test/java/dev/kske/eventbus/CancelTest.java (100%) rename {event-bus => event-bus-core}/src/test/java/dev/kske/eventbus/DispatchTest.java (100%) rename {event-bus => event-bus-core}/src/test/java/dev/kske/eventbus/SimpleEvent.java (100%) rename {event-bus => event-bus-core}/src/test/java/dev/kske/eventbus/SimpleEventSub.java (100%) rename event-bus/pom.xml => pom.xml (83%) diff --git a/.project b/.project new file mode 100644 index 0000000..65850dd --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + event-bus + + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + + diff --git a/event-bus-ap/.classpath b/event-bus-ap/.classpath new file mode 100644 index 0000000..0fb79cf --- /dev/null +++ b/event-bus-ap/.classpath @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/event-bus/.project b/event-bus-ap/.project similarity index 95% rename from event-bus/.project rename to event-bus-ap/.project index 2acd4d0..7976120 100644 --- a/event-bus/.project +++ b/event-bus-ap/.project @@ -1,6 +1,6 @@ - event-bus + event-bus-ap diff --git a/event-bus-ap/pom.xml b/event-bus-ap/pom.xml new file mode 100644 index 0000000..b9207fb --- /dev/null +++ b/event-bus-ap/pom.xml @@ -0,0 +1,16 @@ + + 4.0.0 + + event-bus-ap + + Event Bus Annotation Processor + Annotation processor checking for errors related to the @Event annotation from Event Bus. + + + dev.kske + event-bus + 0.1.0 + + \ No newline at end of file diff --git a/event-bus/.classpath b/event-bus-core/.classpath similarity index 100% rename from event-bus/.classpath rename to event-bus-core/.classpath diff --git a/event-bus-core/.project b/event-bus-core/.project new file mode 100644 index 0000000..8523046 --- /dev/null +++ b/event-bus-core/.project @@ -0,0 +1,23 @@ + + + event-bus-core + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/event-bus-core/pom.xml b/event-bus-core/pom.xml new file mode 100644 index 0000000..1f1f5b6 --- /dev/null +++ b/event-bus-core/pom.xml @@ -0,0 +1,23 @@ + + 4.0.0 + + event-bus-core + Event Bus Core + + + dev.kske + event-bus + 0.1.0 + + + + + org.junit.jupiter + junit-jupiter-api + 5.6.2 + test + + + \ No newline at end of file diff --git a/event-bus/src/main/java/dev/kske/eventbus/Event.java b/event-bus-core/src/main/java/dev/kske/eventbus/Event.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/Event.java rename to event-bus-core/src/main/java/dev/kske/eventbus/Event.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/EventBus.java b/event-bus-core/src/main/java/dev/kske/eventbus/EventBus.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/EventBus.java rename to event-bus-core/src/main/java/dev/kske/eventbus/EventBus.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/EventBusException.java b/event-bus-core/src/main/java/dev/kske/eventbus/EventBusException.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/EventBusException.java rename to event-bus-core/src/main/java/dev/kske/eventbus/EventBusException.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/EventHandler.java b/event-bus-core/src/main/java/dev/kske/eventbus/EventHandler.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/EventHandler.java rename to event-bus-core/src/main/java/dev/kske/eventbus/EventHandler.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/EventListener.java b/event-bus-core/src/main/java/dev/kske/eventbus/EventListener.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/EventListener.java rename to event-bus-core/src/main/java/dev/kske/eventbus/EventListener.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/IEvent.java b/event-bus-core/src/main/java/dev/kske/eventbus/IEvent.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/IEvent.java rename to event-bus-core/src/main/java/dev/kske/eventbus/IEvent.java diff --git a/event-bus/src/main/java/dev/kske/eventbus/package-info.java b/event-bus-core/src/main/java/dev/kske/eventbus/package-info.java similarity index 100% rename from event-bus/src/main/java/dev/kske/eventbus/package-info.java rename to event-bus-core/src/main/java/dev/kske/eventbus/package-info.java diff --git a/event-bus/src/main/java/module-info.java b/event-bus-core/src/main/java/module-info.java similarity index 100% rename from event-bus/src/main/java/module-info.java rename to event-bus-core/src/main/java/module-info.java diff --git a/event-bus/src/test/java/dev/kske/eventbus/CancelTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/CancelTest.java similarity index 100% rename from event-bus/src/test/java/dev/kske/eventbus/CancelTest.java rename to event-bus-core/src/test/java/dev/kske/eventbus/CancelTest.java diff --git a/event-bus/src/test/java/dev/kske/eventbus/DispatchTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/DispatchTest.java similarity index 100% rename from event-bus/src/test/java/dev/kske/eventbus/DispatchTest.java rename to event-bus-core/src/test/java/dev/kske/eventbus/DispatchTest.java diff --git a/event-bus/src/test/java/dev/kske/eventbus/SimpleEvent.java b/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEvent.java similarity index 100% rename from event-bus/src/test/java/dev/kske/eventbus/SimpleEvent.java rename to event-bus-core/src/test/java/dev/kske/eventbus/SimpleEvent.java diff --git a/event-bus/src/test/java/dev/kske/eventbus/SimpleEventSub.java b/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEventSub.java similarity index 100% rename from event-bus/src/test/java/dev/kske/eventbus/SimpleEventSub.java rename to event-bus-core/src/test/java/dev/kske/eventbus/SimpleEventSub.java diff --git a/event-bus/pom.xml b/pom.xml similarity index 83% rename from event-bus/pom.xml rename to pom.xml index 4ddb9ac..e7d4b95 100644 --- a/event-bus/pom.xml +++ b/pom.xml @@ -6,10 +6,16 @@ dev.kske event-bus 0.1.0 + pom Event Bus An event handling framework for Java utilizing annotations. - https://git.kske.dev/zdm/event-bus + https://git.kske.dev/kske/event-bus + + + event-bus-core + event-bus-ap + @@ -33,8 +39,8 @@ - scm:git:https://git.kske.dev/zdm/event-bus.git - scm:git:ssh:git@git.kske.dev:zdm/event-bus.git + scm:git:https://git.kske.dev/kske/event-bus.git + scm:git:ssh:git@git.kske.dev:kske/event-bus.git @@ -89,13 +95,4 @@ - - - - org.junit.jupiter - junit-jupiter-api - 5.6.2 - test - - \ No newline at end of file From fd255d65ccc9147304f5f331e935a64b5abb9afd Mon Sep 17 00:00:00 2001 From: kske Date: Tue, 9 Feb 2021 09:52:26 +0100 Subject: [PATCH 3/8] Rename event-bus module to event-bus-core, add event-bus-ap module event-bus is now a parent project containing the two modules event-bus-core (the previous event-bus) and event-bus-ap (annotation processor). The version of the parent project (and thus that of the modules) has been bumped to 1.0.0, as this change breaks compatibility with previous versions due to the different artifact, module and package names. --- event-bus-ap/.classpath | 30 ++++++++----------- event-bus-ap/pom.xml | 17 ++++++++++- event-bus-core/pom.xml | 9 +++++- .../dev/kske/eventbus/{ => core}/Event.java | 2 +- .../kske/eventbus/{ => core}/EventBus.java | 2 +- .../{ => core}/EventBusException.java | 2 +- .../eventbus/{ => core}/EventHandler.java | 4 +-- .../eventbus/{ => core}/EventListener.java | 2 +- .../dev/kske/eventbus/{ => core}/IEvent.java | 2 +- .../dev/kske/eventbus/core/package-info.java | 9 ++++++ .../java/dev/kske/eventbus/package-info.java | 9 ------ event-bus-core/src/main/java/module-info.java | 10 +++---- .../kske/eventbus/{ => core}/CancelTest.java | 2 +- .../eventbus/{ => core}/DispatchTest.java | 2 +- .../kske/eventbus/{ => core}/SimpleEvent.java | 2 +- .../eventbus/{ => core}/SimpleEventSub.java | 2 +- pom.xml | 5 ++-- 17 files changed, 63 insertions(+), 48 deletions(-) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/Event.java (98%) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/EventBus.java (99%) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/EventBusException.java (95%) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/EventHandler.java (97%) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/EventListener.java (88%) rename event-bus-core/src/main/java/dev/kske/eventbus/{ => core}/IEvent.java (88%) create mode 100644 event-bus-core/src/main/java/dev/kske/eventbus/core/package-info.java delete mode 100644 event-bus-core/src/main/java/dev/kske/eventbus/package-info.java rename event-bus-core/src/test/java/dev/kske/eventbus/{ => core}/CancelTest.java (96%) rename event-bus-core/src/test/java/dev/kske/eventbus/{ => core}/DispatchTest.java (97%) rename event-bus-core/src/test/java/dev/kske/eventbus/{ => core}/SimpleEvent.java (81%) rename event-bus-core/src/test/java/dev/kske/eventbus/{ => core}/SimpleEventSub.java (83%) diff --git a/event-bus-ap/.classpath b/event-bus-ap/.classpath index 0fb79cf..42c6248 100644 --- a/event-bus-ap/.classpath +++ b/event-bus-ap/.classpath @@ -6,24 +6,6 @@ - - - - - - - - - - - - - - - - - - @@ -34,5 +16,17 @@ + + + + + + + + + + + + diff --git a/event-bus-ap/pom.xml b/event-bus-ap/pom.xml index b9207fb..4b0ec76 100644 --- a/event-bus-ap/pom.xml +++ b/event-bus-ap/pom.xml @@ -11,6 +11,21 @@ dev.kske event-bus - 0.1.0 + 1.0.0 + + + + dev.kske + event-bus-core + ${project.version} + + + + + + + + + \ No newline at end of file diff --git a/event-bus-core/pom.xml b/event-bus-core/pom.xml index 1f1f5b6..91ed55d 100644 --- a/event-bus-core/pom.xml +++ b/event-bus-core/pom.xml @@ -9,7 +9,7 @@ dev.kske event-bus - 0.1.0 + 1.0.0 @@ -20,4 +20,11 @@ test + + + + + + + \ No newline at end of file diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/Event.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/Event.java similarity index 98% rename from event-bus-core/src/main/java/dev/kske/eventbus/Event.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/Event.java index 95fb2d3..25ee7a3 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/Event.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/Event.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/EventBus.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java similarity index 99% rename from event-bus-core/src/main/java/dev/kske/eventbus/EventBus.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java index 628e0b9..ae39625 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/EventBus.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; import java.lang.System.Logger; import java.lang.System.Logger.Level; diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/EventBusException.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBusException.java similarity index 95% rename from event-bus-core/src/main/java/dev/kske/eventbus/EventBusException.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/EventBusException.java index 5b3eb8e..d67616c 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/EventBusException.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBusException.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; /** * This runtime exception is thrown when an event bus error occurs. This can diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/EventHandler.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventHandler.java similarity index 97% rename from event-bus-core/src/main/java/dev/kske/eventbus/EventHandler.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/EventHandler.java index 53d9085..aae6387 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/EventHandler.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventHandler.java @@ -1,8 +1,8 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; import java.lang.reflect.*; -import dev.kske.eventbus.Event.USE_PARAMETER; +import dev.kske.eventbus.core.Event.USE_PARAMETER; /** * Internal representation of an event handling method. diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/EventListener.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventListener.java similarity index 88% rename from event-bus-core/src/main/java/dev/kske/eventbus/EventListener.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/EventListener.java index bc48ec7..4e54505 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/EventListener.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventListener.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; /** * Marker interface for event listeners. Event listeners can contain event handling methods to which diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/IEvent.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/IEvent.java similarity index 88% rename from event-bus-core/src/main/java/dev/kske/eventbus/IEvent.java rename to event-bus-core/src/main/java/dev/kske/eventbus/core/IEvent.java index fe9e843..bb09b18 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/IEvent.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/IEvent.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; /** * Marker interface for event objects. Event objects can be used as event handler parameters and diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/package-info.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/package-info.java new file mode 100644 index 0000000..816c30d --- /dev/null +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/package-info.java @@ -0,0 +1,9 @@ +/** + * Contains the public API and implementation of the Event Bus library. + * + * @author Kai S. K. Engelbart + * @since 0.0.1 + * @see dev.kske.eventbus.core.Event + * @see dev.kske.eventbus.core.EventBus + */ +package dev.kske.eventbus.core; diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/package-info.java b/event-bus-core/src/main/java/dev/kske/eventbus/package-info.java deleted file mode 100644 index 99c8ccf..0000000 --- a/event-bus-core/src/main/java/dev/kske/eventbus/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Contains the public API and implementation of the event bus library. - * - * @author Kai S. K. Engelbart - * @since 0.0.1 - * @see dev.kske.eventbus.Event - * @see dev.kske.eventbus.EventBus - */ -package dev.kske.eventbus; diff --git a/event-bus-core/src/main/java/module-info.java b/event-bus-core/src/main/java/module-info.java index 8e10850..c79f442 100644 --- a/event-bus-core/src/main/java/module-info.java +++ b/event-bus-core/src/main/java/module-info.java @@ -1,12 +1,12 @@ /** - * Contains the public API and implementation of the event bus library. + * Contains the public API and implementation of the Event Bus library. * * @author Kai S. K. Engelbart * @since 0.0.3 - * @see dev.kske.eventbus.Event - * @see dev.kske.eventbus.EventBus + * @see dev.kske.eventbus.core.Event + * @see dev.kske.eventbus.core.EventBus */ -module dev.kske.eventbus { +module dev.kske.eventbus.core { - exports dev.kske.eventbus; + exports dev.kske.eventbus.core; } diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/CancelTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/CancelTest.java similarity index 96% rename from event-bus-core/src/test/java/dev/kske/eventbus/CancelTest.java rename to event-bus-core/src/test/java/dev/kske/eventbus/core/CancelTest.java index 8584f48..0d25f93 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/CancelTest.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/CancelTest.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/DispatchTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java similarity index 97% rename from event-bus-core/src/test/java/dev/kske/eventbus/DispatchTest.java rename to event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java index 83c99e7..a683bc7 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/DispatchTest.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; import static org.junit.jupiter.api.Assertions.*; diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEvent.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEvent.java similarity index 81% rename from event-bus-core/src/test/java/dev/kske/eventbus/SimpleEvent.java rename to event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEvent.java index a453acc..ede1afa 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEvent.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEvent.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; /** * A simple event for testing purposes. diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEventSub.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEventSub.java similarity index 83% rename from event-bus-core/src/test/java/dev/kske/eventbus/SimpleEventSub.java rename to event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEventSub.java index 3030eaf..c519fc8 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/SimpleEventSub.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/SimpleEventSub.java @@ -1,4 +1,4 @@ -package dev.kske.eventbus; +package dev.kske.eventbus.core; /** * Subclass of {@link SimpleEvent} for testing purposes. diff --git a/pom.xml b/pom.xml index e7d4b95..cc00e1a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.kske event-bus - 0.1.0 + 1.0.0 pom Event Bus @@ -52,8 +52,7 @@ - - + From 023acb917208b9b0be59e8d9238b3716bf86e562 Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 14 Feb 2021 14:34:19 +0100 Subject: [PATCH 4/8] Add simple annotation processor, generate shaded processor JAR --- event-bus-ap/pom.xml | 26 +++++++ .../dev/kske/eventbus/ap/EventProcessor.java | 78 +++++++++++++++++++ .../dev/kske/eventbus/ap/package-info.java | 7 ++ event-bus-ap/src/main/java/module-info.java | 12 +++ .../javax.annotation.processing.Processor | 1 + 5 files changed, 124 insertions(+) create mode 100644 event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java create mode 100644 event-bus-ap/src/main/java/dev/kske/eventbus/ap/package-info.java create mode 100644 event-bus-ap/src/main/java/module-info.java create mode 100644 event-bus-ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor diff --git a/event-bus-ap/pom.xml b/event-bus-ap/pom.xml index 4b0ec76..e2e253f 100644 --- a/event-bus-ap/pom.xml +++ b/event-bus-ap/pom.xml @@ -27,5 +27,31 @@ + + + maven-compiler-plugin + + -proc:none + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + true + + + + + + \ No newline at end of file diff --git a/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java new file mode 100644 index 0000000..6fb5da3 --- /dev/null +++ b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java @@ -0,0 +1,78 @@ +package dev.kske.eventbus.ap; + +import java.util.Set; + +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.*; +import javax.lang.model.type.*; +import javax.tools.Diagnostic.Kind; + +import dev.kske.eventbus.core.*; + +/** + * This annotation processor checks event handlers for common mistakes which can only be detected + * during runtime otherwise. + * + * @author Kai S. K. Engelbart + * @since 1.0.0 + */ +@SupportedAnnotationTypes("dev.kske.eventbus.core.Event") +@SupportedSourceVersion(SourceVersion.RELEASE_11) +public class EventProcessor extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Event.class)) { + ExecutableElement method = (ExecutableElement) annotatedElement; + Event eventAnnotation = method.getAnnotation(Event.class); + boolean useParameter = false; + + // Determine how the event type is defined + try { + eventAnnotation.eventType(); + } catch (MirroredTypeException e) { + + // Task failed successfully + useParameter = processingEnv.getTypeUtils().isSameType(e.getTypeMirror(), + processingEnv.getElementUtils() + .getTypeElement(Event.USE_PARAMETER.class.getCanonicalName()).asType()); + } + + // Check for correct method signature and return type + if (method.getParameters().size() == 0 && useParameter) + error(method, "The method or the annotation should define the event type"); + + if (method.getParameters().size() == 1 && !useParameter) + error(method, "Either the method or the annotation should define the event type"); + + if (method.getParameters().size() > 1) + error(method, "Method should not have more than one parameter"); + + if (!method.getReturnType().getKind().equals(TypeKind.VOID)) + error(method, "Method needs a return type of void"); + + // Check event type + var paramType = ((ExecutableType) method.asType()).getParameterTypes().get(0); + if (useParameter && !processingEnv.getTypeUtils().isAssignable(paramType, + processingEnv.getElementUtils() + .getTypeElement(IEvent.class.getCanonicalName()).asType())) + error(method.getParameters().get(0), "Parameter should implement IEvent"); + + // Check listener for interface implementation + if (!((TypeElement) method.getEnclosingElement()).getInterfaces().contains(processingEnv + .getElementUtils().getTypeElement(EventListener.class.getCanonicalName()).asType())) + warning(method.getEnclosingElement(), + "Class should implement EventListener interface"); + } + return true; + } + + private void warning(Element e, String msg, Object... args) { + processingEnv.getMessager().printMessage(Kind.WARNING, String.format(msg, args), e); + } + + private void error(Element e, String msg, Object... args) { + processingEnv.getMessager().printMessage(Kind.ERROR, String.format(msg, args), e); + } +} diff --git a/event-bus-ap/src/main/java/dev/kske/eventbus/ap/package-info.java b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/package-info.java new file mode 100644 index 0000000..3a09965 --- /dev/null +++ b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/package-info.java @@ -0,0 +1,7 @@ +/** + * Contains the Event Bus annotation processor. + * + * @author Kai S. K. Engelbart + * @since 1.0.0 + */ +package dev.kske.eventbus.ap; diff --git a/event-bus-ap/src/main/java/module-info.java b/event-bus-ap/src/main/java/module-info.java new file mode 100644 index 0000000..e09c4be --- /dev/null +++ b/event-bus-ap/src/main/java/module-info.java @@ -0,0 +1,12 @@ +/** + * Contains an annotation processor for checking for errors related to the + * {@link dev.kske.eventbus.core.Event} annotation from Event Bus. + * + * @author Kai S. K. Engelbart + * @since 1.0.0 + */ +module dev.kske.eventbus.ap { + + requires java.compiler; + requires dev.kske.eventbus.core; +} diff --git a/event-bus-ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/event-bus-ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor new file mode 100644 index 0000000..13befff --- /dev/null +++ b/event-bus-ap/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -0,0 +1 @@ +dev.kske.eventbus.ap.EventProcessor \ No newline at end of file From ab018451787787cf7fa007a1143cc8e77ae9b55b Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 14 Feb 2021 21:29:06 +0100 Subject: [PATCH 5/8] Refactor EventProcessor for improved readability --- .gitignore | 3 + .../dev/kske/eventbus/ap/EventProcessor.java | 75 +++++++++++++------ 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 6cfda9f..db59885 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ # Maven build directories target/ +# Dependency reduced POM from Maven Shade Plugin +dependency-reduced-pom.xml + # Eclipse settings directories .settings/ diff --git a/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java index 6fb5da3..53ad735 100644 --- a/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java +++ b/event-bus-ap/src/main/java/dev/kske/eventbus/ap/EventProcessor.java @@ -21,51 +21,80 @@ import dev.kske.eventbus.core.*; @SupportedSourceVersion(SourceVersion.RELEASE_11) public class EventProcessor extends AbstractProcessor { + @SuppressWarnings("unchecked") @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { - for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Event.class)) { - ExecutableElement method = (ExecutableElement) annotatedElement; - Event eventAnnotation = method.getAnnotation(Event.class); - boolean useParameter = false; + if (!roundEnv.errorRaised() && !roundEnv.processingOver()) + processRound( + (Set) roundEnv.getElementsAnnotatedWith(Event.class)); + + // Do not claim the processed annotations + return false; + } + + private void processRound(Set eventHandlers) { + for (ExecutableElement eventHandler : eventHandlers) { + TypeElement eventListener = (TypeElement) eventHandler.getEnclosingElement(); + Event eventAnnotation = eventHandler.getAnnotation(Event.class); // Determine how the event type is defined + boolean useParameter; try { eventAnnotation.eventType(); + throw new EventBusException( + "Could not determine event type of handler " + eventHandler); } catch (MirroredTypeException e) { // Task failed successfully useParameter = processingEnv.getTypeUtils().isSameType(e.getTypeMirror(), - processingEnv.getElementUtils() - .getTypeElement(Event.USE_PARAMETER.class.getCanonicalName()).asType()); + getTypeMirror(Event.USE_PARAMETER.class)); } // Check for correct method signature and return type - if (method.getParameters().size() == 0 && useParameter) - error(method, "The method or the annotation should define the event type"); + if (eventHandler.getParameters().size() == 0 && useParameter) + error(eventHandler, "The method or the annotation must define the event type"); - if (method.getParameters().size() == 1 && !useParameter) - error(method, "Either the method or the annotation should define the event type"); + if (eventHandler.getParameters().size() == 1 && !useParameter) + error(eventHandler, + "Either the method or the annotation must define the event type"); - if (method.getParameters().size() > 1) - error(method, "Method should not have more than one parameter"); + if (eventHandler.getParameters().size() > 1) + error(eventHandler, "Method must not have more than one parameter"); - if (!method.getReturnType().getKind().equals(TypeKind.VOID)) - error(method, "Method needs a return type of void"); + if (eventHandler.getReturnType().getKind() != TypeKind.VOID) + error(eventHandler, "Method must return void"); - // Check event type - var paramType = ((ExecutableType) method.asType()).getParameterTypes().get(0); + // Get first parameter as type and element + var paramElement = eventHandler.getParameters().get(0); + var paramType = paramElement.asType(); + + // Check for valid event type if (useParameter && !processingEnv.getTypeUtils().isAssignable(paramType, - processingEnv.getElementUtils() - .getTypeElement(IEvent.class.getCanonicalName()).asType())) - error(method.getParameters().get(0), "Parameter should implement IEvent"); + getTypeMirror(IEvent.class))) + error(paramElement, "Parameter must implement IEvent"); + + // Check for handlers for abstract types that don't include subtypes + if (!eventAnnotation.includeSubtypes() && paramType.getKind() == TypeKind.DECLARED) { + var declaredElement = ((DeclaredType) paramType).asElement(); + if (declaredElement.getKind() == ElementKind.INTERFACE + || declaredElement.getModifiers().contains(Modifier.ABSTRACT)) + warning(paramElement, + "Parameter should be instantiable or handler should include subtypes"); + } // Check listener for interface implementation - if (!((TypeElement) method.getEnclosingElement()).getInterfaces().contains(processingEnv - .getElementUtils().getTypeElement(EventListener.class.getCanonicalName()).asType())) - warning(method.getEnclosingElement(), + if (!eventListener.getInterfaces().contains(getTypeMirror(EventListener.class))) + warning(eventHandler.getEnclosingElement(), "Class should implement EventListener interface"); } - return true; + } + + 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) { From 955e2d82b40768a1c4ea01897ac254ad7cf77a3a Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 14 Feb 2021 21:48:24 +0100 Subject: [PATCH 6/8] Add Event Bus AP section to README Additionally bump version to 1.0.0 and adjust package names. --- README.md | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ffc596d..1bd8862 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Additionally, the class containing the method must implement the `EventListener` Lets look at a simple example: we declare the empty class `SimpleEvent` that implements `IEvent` and can thus be used as an event. ```java -import dev.kske.eventbus.IEvent; +import dev.kske.eventbus.core.IEvent; public class SimpleEvent implements IEvent {} ``` @@ -28,7 +28,7 @@ public class SimpleEvent implements IEvent {} Next, an event listener for the `SimpleEvent` is declared: ```java -import dev.kske.eventbus.*; +import dev.kske.eventbus.core.*; public class SimpleEventListener implements EventListener { @@ -62,7 +62,7 @@ is technically possible, however you would still have to create an instance of t ## Event handlers for subtypes -On certain occasions its practical for an event handler to accept both events of the specified type, as well as subclasses of that event. +On certain occasions it's practical for an event handler to accept both events of the specified type, as well as subclasses of that event. To include subtypes for an event handler, use the `includeSubtypes` parameter as follows: ```java @@ -141,7 +141,41 @@ To include it inside your project, just add the Maven repository and the depende dev.kske event-bus - 0.1.0 + 1.0.0 ``` + +Then, require the Event Bus Core module in your `module-info.java`: + +```java +requires dev.kske.eventbus.core; +``` + +# Compile-Time Error Checking with Event Bus AP + +To assist you with writing event listeners, the Event Bus AP (Annotation Processor) module enforces correct usage of the `@Event` annotation during compile time. +This reduces difficult-to-debug bugs that occur during runtime to compile-time errors which can be easily fixed. + +The event annotation processor detects invalid event handlers, missing `EventListener` implementations, event type issues with more to come in future versions. + +When using Maven, it can be registered using the Maven Compiler Plugin: + +```xml + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + + dev.kske + event-bus-ap + 1.0.0 + + + + +``` + +Alternatively, a JAR file containing the processor is offered with each release for the use within IDEs and environments without Maven support. \ No newline at end of file From ebc11555f6ad53ab5efc3e2559cac441f118e46e Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 15 Feb 2021 08:26:07 +0100 Subject: [PATCH 7/8] Fix developer connection string in POM --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cc00e1a..6832280 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ scm:git:https://git.kske.dev/kske/event-bus.git - scm:git:ssh:git@git.kske.dev:kske/event-bus.git + scm:git:ssh://git@git.kske.dev:420/kske/event-bus.git From e040f6ab1b994cbcc3d4aadbe18582bd2fad788b Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 15 Feb 2021 09:25:16 +0100 Subject: [PATCH 8/8] Simplify binding access calls in EventBus --- .../java/dev/kske/eventbus/core/EventBus.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java index ae39625..2248668 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java @@ -51,11 +51,12 @@ public final class EventBus { return instance; } - private final Map, TreeSet> bindings - = new ConcurrentHashMap<>(); - private final Set registeredListeners = ConcurrentHashMap.newKeySet(); - private final ThreadLocal dispatchState - = ThreadLocal.withInitial(DispatchState::new); + private final Map, TreeSet> bindings = + new ConcurrentHashMap<>(); + private final Set registeredListeners = + ConcurrentHashMap.newKeySet(); + private final ThreadLocal dispatchState = + ThreadLocal.withInitial(DispatchState::new); /** * Dispatches an event to all event handlers registered for it in descending order of their @@ -97,9 +98,7 @@ public final class EventBus { private List getHandlersFor(Class eventClass) { // Get handlers defined for the event class - Set handlers - = bindings.containsKey(eventClass) ? bindings.get(eventClass) - : new TreeSet<>(); + Set handlers = bindings.getOrDefault(eventClass, new TreeSet<>()); // Get subtype handlers for (var binding : bindings.entrySet()) @@ -151,20 +150,18 @@ public final class EventBus { // Initialize and bind the handler var handler = new EventHandler(listener, method, annotation); - if (!bindings.containsKey(handler.getEventType())) - bindings.put(handler.getEventType(), new TreeSet<>()); + bindings.putIfAbsent(handler.getEventType(), new TreeSet<>()); logger.log(Level.DEBUG, "Binding event handler {0}", handler); bindings.get(handler.getEventType()) .add(handler); handlerBound = true; } - if(!handlerBound) + if (!handlerBound) logger.log( Level.WARNING, "No event handlers bound for event listener {0}", - listener.getClass().getName() - ); + listener.getClass().getName()); } /**