diff --git a/src/main/java/io/reactivex/plugins/RxJavaPlugins.java b/src/main/java/io/reactivex/plugins/RxJavaPlugins.java index 875dda8f35..5df1dd78b9 100644 --- a/src/main/java/io/reactivex/plugins/RxJavaPlugins.java +++ b/src/main/java/io/reactivex/plugins/RxJavaPlugins.java @@ -49,7 +49,7 @@ */ public final class RxJavaPlugins { @Nullable - static volatile Consumer errorHandler; + static volatile Consumer errorHandler; @Nullable static volatile Function onScheduleHandler; @@ -197,7 +197,7 @@ public static Function getComputationSchedulerHandler() { * @return the hook consumer, may be null */ @Nullable - public static Consumer getErrorHandler() { + public static Consumer getErrorHandler() { return errorHandler; } @@ -356,7 +356,7 @@ public static Scheduler onComputationScheduler(@NonNull Scheduler defaultSchedul * @param error the error to report */ public static void onError(@NonNull Throwable error) { - Consumer f = errorHandler; + Consumer f = errorHandler; if (error == null) { error = new NullPointerException("onError called with null. Null values are generally not allowed in 2.x operators and sources."); @@ -497,7 +497,7 @@ public static void setComputationSchedulerHandler(@Nullable Function handler) { + public static void setErrorHandler(@Nullable Consumer handler) { if (lockdown) { throw new IllegalStateException("Plugins can't be changed anymore"); } diff --git a/src/test/java/io/reactivex/plugins/RxJavaPluginsTest.java b/src/test/java/io/reactivex/plugins/RxJavaPluginsTest.java index 26b80f392a..668dc59b6c 100644 --- a/src/test/java/io/reactivex/plugins/RxJavaPluginsTest.java +++ b/src/test/java/io/reactivex/plugins/RxJavaPluginsTest.java @@ -1168,7 +1168,28 @@ public void uncaughtException(Thread t, Throwable e) { } } - @SuppressWarnings({ "rawtypes", "unchecked" }) + /** + * Ensure setErrorHandler() accepts a consumer with "? super Throwable" + */ + @Test + public void onErrorWithSuper() throws Exception { + try { + Consumer errorHandler = new Consumer() { + @Override + public void accept(Throwable t) { + throw new TestException("Forced failure 2"); + } + }; + RxJavaPlugins.setErrorHandler(errorHandler); + + Consumer errorHandler1 = RxJavaPlugins.getErrorHandler(); + assertSame(errorHandler, errorHandler1); + } finally { + RxJavaPlugins.reset(); + } + } + + @SuppressWarnings({"rawtypes", "unchecked" }) @Test public void clearIsPassthrough() { try {