The following issues were found

src/test/java/io/reactivex/rxjava3/single/SingleRetryTest.java
22 issues
Avoid throwing raw exception types.
Design

Line: 39

                              numberOfSubscribeCalls.incrementAndGet();

                if (atomicInteger.decrementAndGet() != 0) {
                    throw new RuntimeException();
                }

                throw new IllegalArgumentException();
            }
        })

            

Reported by PMD.

Avoid throwing raw exception types.
Design

Line: 66

                              numberOfSubscribeCalls.incrementAndGet();

                if (atomicInteger.decrementAndGet() != 0) {
                    throw new RuntimeException();
                }

                return true;
            }
        })

            

Reported by PMD.

Avoid throwing raw exception types.
Design

Line: 89

                              numberOfSubscribeCalls.incrementAndGet();

                if (atomicInteger.decrementAndGet() != 0) {
                    throw new RuntimeException();
                }

                return true;
            }
        })

            

Reported by PMD.

Avoid throwing raw exception types.
Design

Line: 112

                              numberOfSubscribeCalls.incrementAndGet();

                if (atomicInteger.decrementAndGet() != 0) {
                    throw new RuntimeException();
                }

                return true;
            }
        })

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 53

                          .test()
            .assertFailure(IllegalArgumentException.class);

        assertEquals(3, numberOfSubscribeCalls.get());
    }

    @Test
    public void retryTimesPredicateWithMatchingRetryAmount() {
        final AtomicInteger atomicInteger = new AtomicInteger(3);

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 76

                          .test()
            .assertResult(true);

        assertEquals(3, numberOfSubscribeCalls.get());
    }

    @Test
    public void retryTimesPredicateWithNotMatchingRetryAmount() {
        final AtomicInteger atomicInteger = new AtomicInteger(3);

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 99

                          .test()
            .assertFailure(RuntimeException.class);

        assertEquals(2, numberOfSubscribeCalls.get());
    }

    @Test
    public void retryTimesPredicateWithZeroRetries() {
        final AtomicInteger atomicInteger = new AtomicInteger(2);

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 122

                          .test()
            .assertFailure(RuntimeException.class);

        assertEquals(1, numberOfSubscribeCalls.get());
    }

    @Test
    public void untilTrueJust() {
        Single.just(1)

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 126

                  }

    @Test
    public void untilTrueJust() {
        Single.just(1)
        .retryUntil(() -> true)
        .test()
        .assertResult(1);
    }

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 127

              
    @Test
    public void untilTrueJust() {
        Single.just(1)
        .retryUntil(() -> true)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/flowable/FlowableWindowTests.java
22 issues
Unit tests should not contain more than 1 assert(s).
Design

Line: 32

              public class FlowableWindowTests extends RxJavaTest {

    @Test
    public void window() {
        final ArrayList<List<Integer>> lists = new ArrayList<>();

        Flowable.concat(
            Flowable.just(1, 2, 3, 4, 5, 6)
            .window(3)

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 41

                          .map(new Function<Flowable<Integer>, Flowable<List<Integer>>>() {
                @Override
                public Flowable<List<Integer>> apply(Flowable<Integer> xs) {
                    return xs.toList().toFlowable();
                }
            })
        )
        .blockingForEach(new Consumer<List<Integer>>() {
            @Override

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 52

                          }
        });

        assertArrayEquals(lists.get(0).toArray(new Integer[3]), new Integer[] { 1, 2, 3 });
        assertArrayEquals(lists.get(1).toArray(new Integer[3]), new Integer[] { 4, 5, 6 });
        assertEquals(2, lists.size());

    }


            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 53

                      });

        assertArrayEquals(lists.get(0).toArray(new Integer[3]), new Integer[] { 1, 2, 3 });
        assertArrayEquals(lists.get(1).toArray(new Integer[3]), new Integer[] { 4, 5, 6 });
        assertEquals(2, lists.size());

    }

    @Test

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 54

              
        assertArrayEquals(lists.get(0).toArray(new Integer[3]), new Integer[] { 1, 2, 3 });
        assertArrayEquals(lists.get(1).toArray(new Integer[3]), new Integer[] { 4, 5, 6 });
        assertEquals(2, lists.size());

    }

    @Test
    public void timeSizeWindowAlternatingBounds() {

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 59

                  }

    @Test
    public void timeSizeWindowAlternatingBounds() {
        TestScheduler scheduler = new TestScheduler();
        PublishProcessor<Integer> pp = PublishProcessor.create();

        TestSubscriber<List<Integer>> ts = pp.window(5, TimeUnit.SECONDS, scheduler, 2)
        .flatMapSingle(new Function<Flowable<Integer>, SingleSource<List<Integer>>>() {

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 72

                      })
        .test();

        pp.onNext(1);
        pp.onNext(2);
        ts.assertValueCount(1); // size bound hit

        scheduler.advanceTimeBy(1, TimeUnit.SECONDS);
        pp.onNext(3);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 73

                      .test();

        pp.onNext(1);
        pp.onNext(2);
        ts.assertValueCount(1); // size bound hit

        scheduler.advanceTimeBy(1, TimeUnit.SECONDS);
        pp.onNext(3);
        scheduler.advanceTimeBy(6, TimeUnit.SECONDS);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 77

                      ts.assertValueCount(1); // size bound hit

        scheduler.advanceTimeBy(1, TimeUnit.SECONDS);
        pp.onNext(3);
        scheduler.advanceTimeBy(6, TimeUnit.SECONDS);
        ts.assertValueCount(2); // time bound hit

        pp.onNext(4);
        pp.onNext(5);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 81

                      scheduler.advanceTimeBy(6, TimeUnit.SECONDS);
        ts.assertValueCount(2); // time bound hit

        pp.onNext(4);
        pp.onNext(5);

        ts.assertValueCount(3); // size bound hit again

        pp.onNext(4);

            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/internal/operators/flowable/BlockingFlowableNext.java
22 issues
Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 36

               */
public final class BlockingFlowableNext<T> implements Iterable<T> {

    final Publisher<? extends T> source;

    public BlockingFlowableNext(Publisher<? extends T> source) {
        this.source = source;
    }


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 51

                  // test needs to access the observer.waiting flag
    static final class NextIterator<T> implements Iterator<T> {

        private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 52

                  static final class NextIterator<T> implements Iterator<T> {

        private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 53

              
        private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;


            

Reported by PMD.

Field next has the same name as a method
Error

Line: 53

              
        private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;


            

Reported by PMD.

Field hasNext has the same name as a method
Error

Line: 54

                      private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

        NextIterator(Publisher<? extends T> items, NextSubscriber<T> subscriber) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 54

                      private final NextSubscriber<T> subscriber;
        private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

        NextIterator(Publisher<? extends T> items, NextSubscriber<T> subscriber) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 55

                      private final Publisher<? extends T> items;
        private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

        NextIterator(Publisher<? extends T> items, NextSubscriber<T> subscriber) {
            this.items = items;

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 56

                      private T next;
        private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

        NextIterator(Publisher<? extends T> items, NextSubscriber<T> subscriber) {
            this.items = items;
            this.subscriber = subscriber;

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 57

                      private boolean hasNext = true;
        private boolean isNextConsumed = true;
        private Throwable error;
        private boolean started;

        NextIterator(Publisher<? extends T> items, NextSubscriber<T> subscriber) {
            this.items = items;
            this.subscriber = subscriber;
        }

            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/internal/operators/maybe/MaybeFlatMapIterableObservable.java
22 issues
Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 35

               */
public final class MaybeFlatMapIterableObservable<T, R> extends Observable<R> {

    final MaybeSource<T> source;

    final Function<? super T, ? extends Iterable<? extends R>> mapper;

    public MaybeFlatMapIterableObservable(MaybeSource<T> source,
            Function<? super T, ? extends Iterable<? extends R>> mapper) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 37

              
    final MaybeSource<T> source;

    final Function<? super T, ? extends Iterable<? extends R>> mapper;

    public MaybeFlatMapIterableObservable(MaybeSource<T> source,
            Function<? super T, ? extends Iterable<? extends R>> mapper) {
        this.source = source;
        this.mapper = mapper;

            

Reported by PMD.

The class 'FlatMapIterableObserver' has a Standard Cyclomatic Complexity of 2 (Highest = 10).
Design

Line: 50

                      source.subscribe(new FlatMapIterableObserver<>(observer, mapper));
    }

    static final class FlatMapIterableObserver<T, R>
    extends BasicQueueDisposable<R>
    implements MaybeObserver<T> {

        final Observer<? super R> downstream;


            

Reported by PMD.

The class 'FlatMapIterableObserver' has a Modified Cyclomatic Complexity of 2 (Highest = 10).
Design

Line: 50

                      source.subscribe(new FlatMapIterableObserver<>(observer, mapper));
    }

    static final class FlatMapIterableObserver<T, R>
    extends BasicQueueDisposable<R>
    implements MaybeObserver<T> {

        final Observer<? super R> downstream;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 54

                  extends BasicQueueDisposable<R>
    implements MaybeObserver<T> {

        final Observer<? super R> downstream;

        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 56

              
        final Observer<? super R> downstream;

        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;

        volatile Iterator<? extends R> it;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 58

              
        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;

        volatile Iterator<? extends R> it;

        volatile boolean cancelled;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 60

              
        Disposable upstream;

        volatile Iterator<? extends R> it;

        volatile boolean cancelled;

        boolean outputFused;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 62

              
        volatile Iterator<? extends R> it;

        volatile boolean cancelled;

        boolean outputFused;

        FlatMapIterableObserver(Observer<? super R> actual,
                Function<? super T, ? extends Iterable<? extends R>> mapper) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 64

              
        volatile boolean cancelled;

        boolean outputFused;

        FlatMapIterableObserver(Observer<? super R> actual,
                Function<? super T, ? extends Iterable<? extends R>> mapper) {
            this.downstream = actual;
            this.mapper = mapper;

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/parallel/ParallelReduceTest.java
22 issues
JUnit tests should include assert() or fail()
Design

Line: 33

              public class ParallelReduceTest extends RxJavaTest {

    @Test
    public void subscriberCount() {
        ParallelFlowableTest.checkSubscriberCount(Flowable.range(1, 5).parallel()
        .reduce(new Supplier<List<Integer>>() {
            @Override
            public List<Integer> get() throws Exception {
                return new ArrayList<>();

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 50

                  }

    @Test
    public void initialCrash() {
        Flowable.range(1, 5)
        .parallel()
        .reduce(new Supplier<List<Integer>>() {
            @Override
            public List<Integer> get() throws Exception {

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 71

                  }

    @Test
    public void reducerCrash() {
        Flowable.range(1, 5)
        .parallel()
        .reduce(new Supplier<List<Integer>>() {
            @Override
            public List<Integer> get() throws Exception {

            

Reported by PMD.

Avoid using Literals in Conditional Statements
Error

Line: 82

                      }, new BiFunction<List<Integer>, Integer, List<Integer>>() {
            @Override
            public List<Integer> apply(List<Integer> a, Integer b) throws Exception {
                if (b == 3) {
                    throw new TestException();
                }
                a.add(b);
                return a;
            }

            

Reported by PMD.

Unit tests should not contain more than 1 assert(s).
Design

Line: 95

                  }

    @Test
    public void cancel() {
        PublishProcessor<Integer> pp = PublishProcessor.create();

        TestSubscriber<List<Integer>> ts = pp
        .parallel()
        .reduce(new Supplier<List<Integer>>() {

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 115

                      .sequential()
        .test();

        assertTrue(pp.hasSubscribers());

        ts.cancel();

        assertFalse(pp.hasSubscribers());
    }

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 115

                      .sequential()
        .test();

        assertTrue(pp.hasSubscribers());

        ts.cancel();

        assertFalse(pp.hasSubscribers());
    }

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 119

              
        ts.cancel();

        assertFalse(pp.hasSubscribers());
    }

    @Test
    public void error() {
        Flowable.<Integer>error(new TestException())

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 119

              
        ts.cancel();

        assertFalse(pp.hasSubscribers());
    }

    @Test
    public void error() {
        Flowable.<Integer>error(new TestException())

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 123

                  }

    @Test
    public void error() {
        Flowable.<Integer>error(new TestException())
        .parallel()
        .reduce(new Supplier<List<Integer>>() {
            @Override
            public List<Integer> get() throws Exception {

            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/internal/schedulers/ScheduledRunnable.java
22 issues
Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 26

              implements Runnable, Callable<Object>, Disposable {

    private static final long serialVersionUID = -6120223772001106981L;
    final Runnable actual;

    /** Indicates that the parent tracking this task has been notified about its completion. */
    static final Object PARENT_DISPOSED = new Object();
    /** Indicates the dispose() was called from within the run/call method. */
    static final Object SYNC_DISPOSED = new Object();

            

Reported by PMD.

The method 'run()' has a cyclomatic complexity of 10.
Design

Line: 61

                  }

    @Override
    public void run() {
        lazySet(THREAD_INDEX, Thread.currentThread());
        try {
            try {
                actual.run();
            } catch (Throwable e) {

            

Reported by PMD.

A catch statement should never catch throwable since it includes errors.
Error

Line: 66

                      try {
            try {
                actual.run();
            } catch (Throwable e) {
                // Exceptions.throwIfFatal(e); nowhere to go
                RxJavaPlugins.onError(e);
                throw e;
            }
        } finally {

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 73

                          }
        } finally {
            Object o = get(PARENT_INDEX);
            if (o != PARENT_DISPOSED && compareAndSet(PARENT_INDEX, o, DONE) && o != null) {
                ((DisposableContainer)o).delete(this);
            }

            for (;;) {
                o = get(FUTURE_INDEX);

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 79

              
            for (;;) {
                o = get(FUTURE_INDEX);
                if (o == SYNC_DISPOSED || o == ASYNC_DISPOSED || compareAndSet(FUTURE_INDEX, o, DONE)) {
                    break;
                }
            }
            lazySet(THREAD_INDEX, null);
        }

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 79

              
            for (;;) {
                o = get(FUTURE_INDEX);
                if (o == SYNC_DISPOSED || o == ASYNC_DISPOSED || compareAndSet(FUTURE_INDEX, o, DONE)) {
                    break;
                }
            }
            lazySet(THREAD_INDEX, null);
        }

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 90

                  public void setFuture(Future<?> f) {
        for (;;) {
            Object o = get(FUTURE_INDEX);
            if (o == DONE) {
                return;
            }
            if (o == SYNC_DISPOSED) {
                f.cancel(false);
                return;

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 93

                          if (o == DONE) {
                return;
            }
            if (o == SYNC_DISPOSED) {
                f.cancel(false);
                return;
            }
            if (o == ASYNC_DISPOSED) {
                f.cancel(true);

            

Reported by PMD.

Use equals() to compare object references.
Error

Line: 97

                              f.cancel(false);
                return;
            }
            if (o == ASYNC_DISPOSED) {
                f.cancel(true);
                return;
            }
            if (compareAndSet(FUTURE_INDEX, o, f)) {
                return;

            

Reported by PMD.

The method 'dispose()' has a cyclomatic complexity of 13.
Design

Line: 108

                  }

    @Override
    public void dispose() {
        for (;;) {
            Object o = get(FUTURE_INDEX);
            if (o == DONE || o == SYNC_DISPOSED || o == ASYNC_DISPOSED) {
                break;
            }

            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/internal/operators/single/SingleUsing.java
22 issues
Avoid reassigning parameters such as 'e'
Design

Line: 163

              
        @SuppressWarnings("unchecked")
        @Override
        public void onError(Throwable e) {
            upstream = DisposableHelper.DISPOSED;

            if (eager) {
                Object u = getAndSet(this);
                if (u != this) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 28

              
public final class SingleUsing<T, U> extends Single<T> {

    final Supplier<U> resourceSupplier;
    final Function<? super U, ? extends SingleSource<? extends T>> singleFunction;
    final Consumer<? super U> disposer;
    final boolean eager;

    public SingleUsing(Supplier<U> resourceSupplier,

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 29

              public final class SingleUsing<T, U> extends Single<T> {

    final Supplier<U> resourceSupplier;
    final Function<? super U, ? extends SingleSource<? extends T>> singleFunction;
    final Consumer<? super U> disposer;
    final boolean eager;

    public SingleUsing(Supplier<U> resourceSupplier,
                       Function<? super U, ? extends SingleSource<? extends T>> singleFunction,

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 30

              
    final Supplier<U> resourceSupplier;
    final Function<? super U, ? extends SingleSource<? extends T>> singleFunction;
    final Consumer<? super U> disposer;
    final boolean eager;

    public SingleUsing(Supplier<U> resourceSupplier,
                       Function<? super U, ? extends SingleSource<? extends T>> singleFunction,
                       Consumer<? super U> disposer,

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 31

                  final Supplier<U> resourceSupplier;
    final Function<? super U, ? extends SingleSource<? extends T>> singleFunction;
    final Consumer<? super U> disposer;
    final boolean eager;

    public SingleUsing(Supplier<U> resourceSupplier,
                       Function<? super U, ? extends SingleSource<? extends T>> singleFunction,
                       Consumer<? super U> disposer,
                       boolean eager) {

            

Reported by PMD.

A catch statement should never catch throwable since it includes errors.
Error

Line: 50

              
        try {
            resource = resourceSupplier.get();
        } catch (Throwable ex) {
            Exceptions.throwIfFatal(ex);
            EmptyDisposable.error(ex, observer);
            return;
        }


            

Reported by PMD.

A catch statement should never catch throwable since it includes errors.
Error

Line: 60

              
        try {
            source = Objects.requireNonNull(singleFunction.apply(resource), "The singleFunction returned a null SingleSource");
        } catch (Throwable ex) {
            Exceptions.throwIfFatal(ex);

            if (eager) {
                try {
                    disposer.accept(resource);

            

Reported by PMD.

A catch statement should never catch throwable since it includes errors.
Error

Line: 66

                          if (eager) {
                try {
                    disposer.accept(resource);
                } catch (Throwable exc) {
                    Exceptions.throwIfFatal(exc);
                    ex = new CompositeException(ex, exc);
                }
            }
            EmptyDisposable.error(ex, observer);

            

Reported by PMD.

Avoid reassigning caught exception 'ex'
Design

Line: 68

                                  disposer.accept(resource);
                } catch (Throwable exc) {
                    Exceptions.throwIfFatal(exc);
                    ex = new CompositeException(ex, exc);
                }
            }
            EmptyDisposable.error(ex, observer);
            if (!eager) {
                try {

            

Reported by PMD.

A catch statement should never catch throwable since it includes errors.
Error

Line: 75

                          if (!eager) {
                try {
                    disposer.accept(resource);
                } catch (Throwable exc) {
                    Exceptions.throwIfFatal(exc);
                    RxJavaPlugins.onError(exc);
                }
            }
            return;

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/single/SingleCacheTest.java
22 issues
JUnit tests should include assert() or fail()
Design

Line: 27

              public class SingleCacheTest extends RxJavaTest {

    @Test
    public void cancelImmediately() {
        PublishProcessor<Integer> pp = PublishProcessor.create();

        Single<Integer> cached = pp.single(-99).cache();

        TestObserver<Integer> to = cached.test(true);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 30

                  public void cancelImmediately() {
        PublishProcessor<Integer> pp = PublishProcessor.create();

        Single<Integer> cached = pp.single(-99).cache();

        TestObserver<Integer> to = cached.test(true);

        pp.onNext(1);
        pp.onComplete();

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 30

                  public void cancelImmediately() {
        PublishProcessor<Integer> pp = PublishProcessor.create();

        Single<Integer> cached = pp.single(-99).cache();

        TestObserver<Integer> to = cached.test(true);

        pp.onNext(1);
        pp.onComplete();

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 32

              
        Single<Integer> cached = pp.single(-99).cache();

        TestObserver<Integer> to = cached.test(true);

        pp.onNext(1);
        pp.onComplete();

        to.assertEmpty();

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 34

              
        TestObserver<Integer> to = cached.test(true);

        pp.onNext(1);
        pp.onComplete();

        to.assertEmpty();

        cached.test().assertResult(1);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 35

                      TestObserver<Integer> to = cached.test(true);

        pp.onNext(1);
        pp.onComplete();

        to.assertEmpty();

        cached.test().assertResult(1);
    }

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 37

                      pp.onNext(1);
        pp.onComplete();

        to.assertEmpty();

        cached.test().assertResult(1);
    }

    @Test

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 39

              
        to.assertEmpty();

        cached.test().assertResult(1);
    }

    @Test
    public void addRemoveRace() {
        for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) {

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 39

              
        to.assertEmpty();

        cached.test().assertResult(1);
    }

    @Test
    public void addRemoveRace() {
        for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) {

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 43

                  }

    @Test
    public void addRemoveRace() {
        for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) {
            PublishProcessor<Integer> pp = PublishProcessor.create();

            final Single<Integer> cached = pp.single(-99).cache();


            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/internal/operators/single/SingleFlatMapIterableObservable.java
22 issues
Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 35

               */
public final class SingleFlatMapIterableObservable<T, R> extends Observable<R> {

    final SingleSource<T> source;

    final Function<? super T, ? extends Iterable<? extends R>> mapper;

    public SingleFlatMapIterableObservable(SingleSource<T> source,
            Function<? super T, ? extends Iterable<? extends R>> mapper) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 37

              
    final SingleSource<T> source;

    final Function<? super T, ? extends Iterable<? extends R>> mapper;

    public SingleFlatMapIterableObservable(SingleSource<T> source,
            Function<? super T, ? extends Iterable<? extends R>> mapper) {
        this.source = source;
        this.mapper = mapper;

            

Reported by PMD.

The class 'FlatMapIterableObserver' has a Modified Cyclomatic Complexity of 2 (Highest = 10).
Design

Line: 50

                      source.subscribe(new FlatMapIterableObserver<>(observer, mapper));
    }

    static final class FlatMapIterableObserver<T, R>
    extends BasicIntQueueDisposable<R>
    implements SingleObserver<T> {

        private static final long serialVersionUID = -8938804753851907758L;


            

Reported by PMD.

The class 'FlatMapIterableObserver' has a Standard Cyclomatic Complexity of 2 (Highest = 10).
Design

Line: 50

                      source.subscribe(new FlatMapIterableObserver<>(observer, mapper));
    }

    static final class FlatMapIterableObserver<T, R>
    extends BasicIntQueueDisposable<R>
    implements SingleObserver<T> {

        private static final long serialVersionUID = -8938804753851907758L;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 56

              
        private static final long serialVersionUID = -8938804753851907758L;

        final Observer<? super R> downstream;

        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 58

              
        final Observer<? super R> downstream;

        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;

        volatile Iterator<? extends R> it;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 60

              
        final Function<? super T, ? extends Iterable<? extends R>> mapper;

        Disposable upstream;

        volatile Iterator<? extends R> it;

        volatile boolean cancelled;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 62

              
        Disposable upstream;

        volatile Iterator<? extends R> it;

        volatile boolean cancelled;

        boolean outputFused;


            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 64

              
        volatile Iterator<? extends R> it;

        volatile boolean cancelled;

        boolean outputFused;

        FlatMapIterableObserver(Observer<? super R> actual,
                Function<? super T, ? extends Iterable<? extends R>> mapper) {

            

Reported by PMD.

Found non-transient, non-static member. Please mark as transient or provide accessors.
Error

Line: 66

              
        volatile boolean cancelled;

        boolean outputFused;

        FlatMapIterableObserver(Observer<? super R> actual,
                Function<? super T, ? extends Iterable<? extends R>> mapper) {
            this.downstream = actual;
            this.mapper = mapper;

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/single/SingleMergeTest.java
22 issues
This class has too many methods, consider refactoring it.
Design

Line: 27

              import io.reactivex.rxjava3.plugins.RxJavaPlugins;
import io.reactivex.rxjava3.testsupport.TestHelper;

public class SingleMergeTest extends RxJavaTest {

    @Test
    public void mergeSingleSingle() {

        Single.merge(Single.just(Single.just(1)))

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 30

              public class SingleMergeTest extends RxJavaTest {

    @Test
    public void mergeSingleSingle() {

        Single.merge(Single.just(Single.just(1)))
        .test()
        .assertResult(1);
    }

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 32

                  @Test
    public void mergeSingleSingle() {

        Single.merge(Single.just(Single.just(1)))
        .test()
        .assertResult(1);
    }

    @Test

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 32

                  @Test
    public void mergeSingleSingle() {

        Single.merge(Single.just(Single.just(1)))
        .test()
        .assertResult(1);
    }

    @Test

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 38

                  }

    @Test
    public void merge2() {
        Single.merge(Single.just(1), Single.just(2))
        .test()
        .assertResult(1, 2);
    }


            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 39

              
    @Test
    public void merge2() {
        Single.merge(Single.just(1), Single.just(2))
        .test()
        .assertResult(1, 2);
    }

    @Test

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 39

              
    @Test
    public void merge2() {
        Single.merge(Single.just(1), Single.just(2))
        .test()
        .assertResult(1, 2);
    }

    @Test

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 45

                  }

    @Test
    public void merge3() {
        Single.merge(Single.just(1), Single.just(2), Single.just(3))
        .test()
        .assertResult(1, 2, 3);
    }


            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 46

              
    @Test
    public void merge3() {
        Single.merge(Single.just(1), Single.just(2), Single.just(3))
        .test()
        .assertResult(1, 2, 3);
    }

    @Test

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 46

              
    @Test
    public void merge3() {
        Single.merge(Single.just(1), Single.just(2), Single.just(3))
        .test()
        .assertResult(1, 2, 3);
    }

    @Test

            

Reported by PMD.