From 9587f698a205f52d1c15793a872e222b7ed4efab Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Thu, 14 May 2020 19:54:30 +0200 Subject: [PATCH] Nag user (and sentry) if event handlers declare to throw an exception --- .../net/runelite/client/plugins/Plugin.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 29867c27e0..c9b8001fa7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -29,17 +29,20 @@ import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; import io.reactivex.rxjava3.functions.Consumer; +import io.sentry.Sentry; import java.lang.reflect.Method; import java.util.Set; import lombok.AccessLevel; import lombok.Getter; import lombok.Value; +import lombok.extern.slf4j.Slf4j; import net.runelite.api.events.Event; import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventScheduler; import net.runelite.client.eventbus.Subscribe; import org.pf4j.ExtensionPoint; +@Slf4j public abstract class Plugin implements Module, ExtensionPoint { private final Set annotatedSubscriptions = findSubscriptions(); @@ -90,6 +93,11 @@ public abstract class Plugin implements Module, ExtensionPoint assert Event.class.isAssignableFrom(type) : "Parameters of methods annotated with @Subscribe should implement net.runelite.api.events.Event"; assert method.getReturnType() == void.class : "Methods annotated with @Subscribe should have a void return type"; + if (method.getExceptionTypes().length != 0) + { + log.warn("Event handlers should handle all checked exceptions themselves " + method.toString()); + Sentry.capture("EventHandler " + method.toString()); // Spam Owain's inbox with this :) + } method.setAccessible(true); @@ -102,13 +110,14 @@ public abstract class Plugin implements Module, ExtensionPoint } @Value + @SuppressWarnings("rawtypes") private static class Subscription { - private final Class type; - private final Consumer method; - private final int takeUntil; - private final EventScheduler subscribe; - private final EventScheduler observe; + Class type; + Consumer method; + int takeUntil; + EventScheduler subscribe; + EventScheduler observe; } public void resetConfiguration()