Add getter for registered events Before this change, the only way to access the registered types was abusing the Java reflection to access private field `EventTypes.typesByString`. Allow instead to expose the registered types as public supported method `EventTypes.getRegisteredEvents()`. Release-Notes: Add public `EventTypes.getRegisteredEvents()` Change-Id: I7b4369112e838b820e452a24b4ea0da80d7664d2
diff --git a/java/com/google/gerrit/server/events/EventTypes.java b/java/com/google/gerrit/server/events/EventTypes.java index 5498ec8..229ef86 100644 --- a/java/com/google/gerrit/server/events/EventTypes.java +++ b/java/com/google/gerrit/server/events/EventTypes.java
@@ -14,6 +14,7 @@ package com.google.gerrit.server.events; +import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.Map; @@ -61,4 +62,15 @@ public static Class<?> getClass(String type) { return typesByString.get(type); } + + /** + * Get a copy of all currently registered events. + * + * <p>The key is the one given to the evenType parameter of the {@link #register} method. + * + * @return ImmutableMap of event types, Event classes. + */ + public static Map<String, Class<?>> getRegisteredEvents() { + return ImmutableMap.copyOf(typesByString); + } }
diff --git a/javatests/com/google/gerrit/server/events/EventTypesTest.java b/javatests/com/google/gerrit/server/events/EventTypesTest.java index c822d6c..7e97f184 100644 --- a/javatests/com/google/gerrit/server/events/EventTypesTest.java +++ b/javatests/com/google/gerrit/server/events/EventTypesTest.java
@@ -48,4 +48,16 @@ Class<?> clazz = EventTypes.getClass("does-not-exist-event"); assertThat(clazz).isNull(); } + + @Test + public void getRegisteredEventsGetsANewlyRegisteredEvent() { + EventTypes.register(TestEvent.TYPE, TestEvent.class); + assertThat(EventTypes.getRegisteredEvents()).containsEntry(TestEvent.TYPE, TestEvent.class); + } + + @Test + public void getRegisteredEventsGetsTypeGivenAtRegistration() { + EventTypes.register("alternate-type", TestEvent.class); + assertThat(EventTypes.getRegisteredEvents()).containsEntry("alternate-type", TestEvent.class); + } }