diff --git a/autodispose/build.gradle b/autodispose/build.gradle index b08066c74..fa72dc19f 100755 --- a/autodispose/build.gradle +++ b/autodispose/build.gradle @@ -36,6 +36,8 @@ test { dependencies { api deps.rx.java compileOnly deps.misc.errorProneAnnotations + compileOnly deps.misc.jsr305 + errorprone deps.build.errorProne testCompile deps.test.junit diff --git a/autodispose/src/main/java/com/uber/autodispose/AutoDisposableHelper.java b/autodispose/src/main/java/com/uber/autodispose/AutoDisposableHelper.java index 1fc9d5954..67a3fc1ed 100755 --- a/autodispose/src/main/java/com/uber/autodispose/AutoDisposableHelper.java +++ b/autodispose/src/main/java/com/uber/autodispose/AutoDisposableHelper.java @@ -19,6 +19,7 @@ import io.reactivex.disposables.Disposable; import io.reactivex.plugins.RxJavaPlugins; import java.util.concurrent.atomic.AtomicReference; +import javax.annotation.Nullable; /** * Utility methods for working with Disposables atomically. Copied from the RxJava implementation. @@ -33,7 +34,7 @@ static boolean isDisposed(Disposable d) { return d == DISPOSED; } - static boolean set(AtomicReference field, Disposable d) { + static boolean set(AtomicReference field, @Nullable Disposable d) { for (; ; ) { Disposable current = field.get(); if (current == DISPOSED) { @@ -96,7 +97,7 @@ static boolean setIfNotSet(AtomicReference field, Disposable d) { * @return true if the operation succeeded, false if the target field contained * the common DISPOSED instance and the given disposable (if not null) is disposed. */ - static boolean replace(AtomicReference field, Disposable d) { + static boolean replace(AtomicReference field, @Nullable Disposable d) { for (; ; ) { Disposable current = field.get(); if (current == DISPOSED) { @@ -140,7 +141,8 @@ static boolean dispose(AtomicReference field) { * @param next the next Disposable, expected to be non-null * @return true if the validation succeeded */ - static boolean validate(Disposable current, Disposable next) { + static boolean validate(@Nullable Disposable current, Disposable next) { + //noinspection ConstantConditions leftover from original RxJava implementation if (next == null) { RxJavaPlugins.onError(new NullPointerException("next is null")); return false; diff --git a/autodispose/src/main/java/com/uber/autodispose/AutoDisposePlugins.java b/autodispose/src/main/java/com/uber/autodispose/AutoDisposePlugins.java index 55073d780..8cb95e98d 100644 --- a/autodispose/src/main/java/com/uber/autodispose/AutoDisposePlugins.java +++ b/autodispose/src/main/java/com/uber/autodispose/AutoDisposePlugins.java @@ -16,8 +16,8 @@ package com.uber.autodispose; -import io.reactivex.annotations.Nullable; import io.reactivex.functions.Consumer; +import javax.annotation.Nullable; /** * Utility class to inject handlers to certain standard AutoDispose operations. diff --git a/autodispose/src/main/java/com/uber/autodispose/AutoDisposeUtil.java b/autodispose/src/main/java/com/uber/autodispose/AutoDisposeUtil.java index 8318c7d2e..78cad828c 100755 --- a/autodispose/src/main/java/com/uber/autodispose/AutoDisposeUtil.java +++ b/autodispose/src/main/java/com/uber/autodispose/AutoDisposeUtil.java @@ -16,7 +16,7 @@ package com.uber.autodispose; -import io.reactivex.annotations.Nullable; +import javax.annotation.Nullable; final class AutoDisposeUtil { diff --git a/autodispose/src/main/java/com/uber/autodispose/AutoSubscriptionHelper.java b/autodispose/src/main/java/com/uber/autodispose/AutoSubscriptionHelper.java index d537aeb44..44952ef4e 100755 --- a/autodispose/src/main/java/com/uber/autodispose/AutoSubscriptionHelper.java +++ b/autodispose/src/main/java/com/uber/autodispose/AutoSubscriptionHelper.java @@ -19,6 +19,7 @@ import io.reactivex.plugins.RxJavaPlugins; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; +import javax.annotation.Nullable; import org.reactivestreams.Subscription; /** @@ -48,7 +49,8 @@ enum AutoSubscriptionHelper implements Subscription { * @param next the next Subscription, expected to be non-null * @return true if the validation succeeded */ - static boolean validate(Subscription current, Subscription next) { + static boolean validate(@Nullable Subscription current, Subscription next) { + //noinspection ConstantConditions left as is from original RxJava implementation if (next == null) { RxJavaPlugins.onError(new NullPointerException("next is null")); return false; @@ -113,7 +115,7 @@ static boolean isCancelled(Subscription s) { * holds the {@link #CANCELLED} instance. * @see #replace(AtomicReference, Subscription) */ - static boolean set(AtomicReference field, Subscription s) { + static boolean set(AtomicReference field, @Nullable Subscription s) { for (; ; ) { Subscription current = field.get(); if (current == CANCELLED) { @@ -175,7 +177,7 @@ static boolean setIfNotSet(AtomicReference field, Subscription s) * holds the {@link #CANCELLED} instance. * @see #set(AtomicReference, Subscription) */ - static boolean replace(AtomicReference field, Subscription s) { + static boolean replace(AtomicReference field, @Nullable Subscription s) { for (; ; ) { Subscription current = field.get(); if (current == CANCELLED) { diff --git a/autodispose/src/main/java/com/uber/autodispose/LifecycleScopeProvider.java b/autodispose/src/main/java/com/uber/autodispose/LifecycleScopeProvider.java index b90fab340..2c2f39d26 100755 --- a/autodispose/src/main/java/com/uber/autodispose/LifecycleScopeProvider.java +++ b/autodispose/src/main/java/com/uber/autodispose/LifecycleScopeProvider.java @@ -18,8 +18,8 @@ import io.reactivex.Observable; import io.reactivex.annotations.CheckReturnValue; -import io.reactivex.annotations.Nullable; import io.reactivex.functions.Function; +import javax.annotation.Nullable; /** * An interface that, when implemented, provides information to AutoDispose to allow it to resolve diff --git a/autodispose/src/main/java/com/uber/autodispose/ScopeUtil.java b/autodispose/src/main/java/com/uber/autodispose/ScopeUtil.java index 5e7728edd..fe696a823 100644 --- a/autodispose/src/main/java/com/uber/autodispose/ScopeUtil.java +++ b/autodispose/src/main/java/com/uber/autodispose/ScopeUtil.java @@ -16,13 +16,13 @@ package com.uber.autodispose; -import java.util.concurrent.Callable; - import io.reactivex.Maybe; import io.reactivex.MaybeSource; import io.reactivex.Observable; +import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.functions.Predicate; +import java.util.concurrent.Callable; /** * Utilities for dealing with scopes, usually for providers. This includes factories for resolving @@ -76,8 +76,10 @@ public static Maybe deferredResolvedLifecycle( E lastEvent = provider.peekLifecycle(); if (checkStartBoundary && lastEvent == null) { LifecycleNotStartedException exception = new LifecycleNotStartedException(); - if (AutoDisposePlugins.getOutsideLifecycleHandler() != null) { - AutoDisposePlugins.getOutsideLifecycleHandler().accept(exception); + Consumer handler + = AutoDisposePlugins.getOutsideLifecycleHandler(); + if (handler != null) { + handler.accept(exception); return Maybe.just(LifecycleEndNotification.INSTANCE); } else { throw exception; @@ -89,8 +91,10 @@ public static Maybe deferredResolvedLifecycle( .apply(lastEvent); } catch (Exception e) { if (checkEndBoundary && e instanceof LifecycleEndedException) { - if (AutoDisposePlugins.getOutsideLifecycleHandler() != null) { - AutoDisposePlugins.getOutsideLifecycleHandler().accept((LifecycleEndedException) e); + Consumer handler + = AutoDisposePlugins.getOutsideLifecycleHandler(); + if (handler != null) { + handler.accept((LifecycleEndedException) e); return Maybe.just(LifecycleEndNotification.INSTANCE); } else { throw e; diff --git a/autodispose/src/main/java/com/uber/autodispose/TestLifecycleScopeProvider.java b/autodispose/src/main/java/com/uber/autodispose/TestLifecycleScopeProvider.java index 97959f68f..7b63aa8a1 100644 --- a/autodispose/src/main/java/com/uber/autodispose/TestLifecycleScopeProvider.java +++ b/autodispose/src/main/java/com/uber/autodispose/TestLifecycleScopeProvider.java @@ -17,10 +17,9 @@ package com.uber.autodispose; import io.reactivex.Observable; -import io.reactivex.annotations.NonNull; -import io.reactivex.annotations.Nullable; import io.reactivex.functions.Function; import io.reactivex.subjects.BehaviorSubject; +import javax.annotation.Nullable; /** * Test utility to create {@link LifecycleScopeProvider} instances for tests. @@ -66,7 +65,7 @@ public static TestLifecycleScopeProvider createInitial(TestLifecycle initialValu @Override public Function correspondingEvents() { return new Function() { - @Override public TestLifecycle apply(@NonNull TestLifecycle testLifecycle) { + @Override public TestLifecycle apply(TestLifecycle testLifecycle) { switch (testLifecycle) { case STARTED: return TestLifecycle.STOPPED; diff --git a/autodispose/src/main/java/com/uber/autodispose/package-info.java b/autodispose/src/main/java/com/uber/autodispose/package-info.java new file mode 100644 index 000000000..32f6415f8 --- /dev/null +++ b/autodispose/src/main/java/com/uber/autodispose/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017. Uber Technologies + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * AutoDispose is an RxJava 2 tool for automatically binding the execution of RxJava 2 streams to a + * provided scope via disposal/cancellation. + */ +@javax.annotation.ParametersAreNonnullByDefault +package com.uber.autodispose; diff --git a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeMaybeObserverTest.java b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeMaybeObserverTest.java index b49712e20..80f8a9b63 100755 --- a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeMaybeObserverTest.java +++ b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeMaybeObserverTest.java @@ -19,16 +19,13 @@ import io.reactivex.Maybe; import io.reactivex.MaybeEmitter; import io.reactivex.MaybeOnSubscribe; -import io.reactivex.annotations.NonNull; import io.reactivex.functions.Cancellable; import io.reactivex.functions.Consumer; import io.reactivex.functions.Predicate; import io.reactivex.observers.TestObserver; import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.MaybeSubject; - import java.util.concurrent.atomic.AtomicInteger; - import org.junit.After; import org.junit.Test; @@ -67,7 +64,7 @@ public class AutoDisposeMaybeObserverTest { Maybe.just(new BClass()) .to(new MaybeScoper(Maybe.never())) .subscribe(new Consumer() { - @Override public void accept(@NonNull AClass aClass) throws Exception { + @Override public void accept(AClass aClass) throws Exception { } }); @@ -87,7 +84,7 @@ public class AutoDisposeMaybeObserverTest { .subscribe(o); source.to(new MaybeScoper(lifecycle)) .subscribe(new Consumer() { - @Override public void accept(@NonNull Integer integer) throws Exception { + @Override public void accept(Integer integer) throws Exception { } }); diff --git a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeObserverTest.java b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeObserverTest.java index f2b82592f..66080b5e5 100755 --- a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeObserverTest.java +++ b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeObserverTest.java @@ -20,7 +20,6 @@ import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; -import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Cancellable; import io.reactivex.functions.Consumer; @@ -30,7 +29,6 @@ import io.reactivex.subjects.MaybeSubject; import io.reactivex.subjects.PublishSubject; import java.util.concurrent.atomic.AtomicInteger; - import org.junit.After; import org.junit.Test; @@ -69,7 +67,7 @@ public class AutoDisposeObserverTest { Observable.just(new BClass()) .to(new ObservableScoper(Maybe.never())) .subscribe(new Consumer() { - @Override public void accept(@NonNull AClass aClass) throws Exception { + @Override public void accept(AClass aClass) throws Exception { } }); diff --git a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSingleObserverTest.java b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSingleObserverTest.java index 7dea2c711..3583b6ac7 100755 --- a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSingleObserverTest.java +++ b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSingleObserverTest.java @@ -20,7 +20,6 @@ import io.reactivex.Single; import io.reactivex.SingleEmitter; import io.reactivex.SingleOnSubscribe; -import io.reactivex.annotations.NonNull; import io.reactivex.functions.Cancellable; import io.reactivex.functions.Consumer; import io.reactivex.functions.Predicate; @@ -29,7 +28,6 @@ import io.reactivex.subjects.MaybeSubject; import io.reactivex.subjects.SingleSubject; import java.util.concurrent.atomic.AtomicInteger; - import org.junit.After; import org.junit.Test; @@ -68,7 +66,7 @@ public class AutoDisposeSingleObserverTest { Single.just(new BClass()) .to(new SingleScoper(Maybe.never())) .subscribe(new Consumer() { - @Override public void accept(@NonNull AClass aClass) throws Exception { + @Override public void accept(AClass aClass) throws Exception { } }); diff --git a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSubscriberTest.java b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSubscriberTest.java index efca785e0..a1e5a1737 100755 --- a/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSubscriberTest.java +++ b/autodispose/src/test/java/com/uber/autodispose/AutoDisposeSubscriberTest.java @@ -21,7 +21,6 @@ import io.reactivex.FlowableEmitter; import io.reactivex.FlowableOnSubscribe; import io.reactivex.Maybe; -import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Cancellable; import io.reactivex.functions.Consumer; @@ -32,7 +31,6 @@ import io.reactivex.subscribers.TestSubscriber; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; - import org.junit.After; import org.junit.Test; @@ -71,7 +69,7 @@ public class AutoDisposeSubscriberTest { Flowable.just(new BClass()) .to(new FlowableScoper(Maybe.never())) .subscribe(new Consumer() { - @Override public void accept(@NonNull AClass aClass) throws Exception { + @Override public void accept(AClass aClass) throws Exception { } }); diff --git a/autodispose/src/test/java/com/uber/autodispose/TestUtil.java b/autodispose/src/test/java/com/uber/autodispose/TestUtil.java index 1041043d3..f64512823 100755 --- a/autodispose/src/test/java/com/uber/autodispose/TestUtil.java +++ b/autodispose/src/test/java/com/uber/autodispose/TestUtil.java @@ -18,7 +18,6 @@ import io.reactivex.Maybe; import io.reactivex.Observable; -import io.reactivex.annotations.NonNull; import io.reactivex.functions.Function; import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.MaybeSubject; @@ -53,11 +52,11 @@ static ScopeProvider makeProvider(final MaybeSubject scope) { static LifecycleScopeProvider makeLifecycleProvider( final BehaviorSubject lifecycle) { return new LifecycleScopeProvider() { - @NonNull @Override public Observable lifecycle() { + @Override public Observable lifecycle() { return lifecycle; } - @NonNull @Override public Function correspondingEvents() { + @Override public Function correspondingEvents() { return CORRESPONDING_EVENTS; } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 480eaf5f5..578a07386 100755 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -45,7 +45,8 @@ def kotlin = [ ] def misc = [ - errorProneAnnotations: "com.google.errorprone:error_prone_annotations:${versions.errorProne}" + errorProneAnnotations: "com.google.errorprone:error_prone_annotations:${versions.errorProne}", + jsr305: 'com.google.code.findbugs:jsr305:3.0.2' ] def rx = [