The following issues were found

src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSkipWhileTest.java
76 issues
Avoid throwing raw exception types.
Design

Line: 38

                      @Override
        public boolean test(Integer v) {
            if (v == 42) {
                throw new RuntimeException("that's not the answer to everything!");
            }
            return v < 5;
        }
    };


            

Reported by PMD.

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

Line: 32

              
public class FlowableSkipWhileTest extends RxJavaTest {

    Subscriber<Integer> w = TestHelper.mockSubscriber();

    private static final Predicate<Integer> LESS_THAN_FIVE = new Predicate<Integer>() {
        @Override
        public boolean test(Integer v) {
            if (v == 42) {

            

Reported by PMD.

Avoid using Literals in Conditional Statements
Error

Line: 37

                  private static final Predicate<Integer> LESS_THAN_FIVE = new Predicate<Integer>() {
        @Override
        public boolean test(Integer v) {
            if (v == 42) {
                throw new RuntimeException("that's not the answer to everything!");
            }
            return v < 5;
        }
    };

            

Reported by PMD.

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

Line: 53

                  };

    @Test
    public void skipWithIndex() {
        Flowable<Integer> src = Flowable.just(1, 2, 3, 4, 5);
        src.skipWhile(INDEX_LESS_THAN_THREE).subscribe(w);

        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);

            

Reported by PMD.

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

Line: 55

                  @Test
    public void skipWithIndex() {
        Flowable<Integer> src = Flowable.just(1, 2, 3, 4, 5);
        src.skipWhile(INDEX_LESS_THAN_THREE).subscribe(w);

        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();

            

Reported by PMD.

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

Line: 55

                  @Test
    public void skipWithIndex() {
        Flowable<Integer> src = Flowable.just(1, 2, 3, 4, 5);
        src.skipWhile(INDEX_LESS_THAN_THREE).subscribe(w);

        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();

            

Reported by PMD.

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

Line: 58

                      src.skipWhile(INDEX_LESS_THAN_THREE).subscribe(w);

        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();
        inOrder.verify(w, never()).onError(any(Throwable.class));
    }


            

Reported by PMD.

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

Line: 58

                      src.skipWhile(INDEX_LESS_THAN_THREE).subscribe(w);

        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();
        inOrder.verify(w, never()).onError(any(Throwable.class));
    }


            

Reported by PMD.

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

Line: 59

              
        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();
        inOrder.verify(w, never()).onError(any(Throwable.class));
    }

    @Test

            

Reported by PMD.

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

Line: 59

              
        InOrder inOrder = inOrder(w);
        inOrder.verify(w, times(1)).onNext(4);
        inOrder.verify(w, times(1)).onNext(5);
        inOrder.verify(w, times(1)).onComplete();
        inOrder.verify(w, never()).onError(any(Throwable.class));
    }

    @Test

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableDoAfterNextTest.java
75 issues
This class has too many methods, consider refactoring it.
Design

Line: 32

              import io.reactivex.rxjava3.subjects.UnicastSubject;
import io.reactivex.rxjava3.testsupport.*;

public class ObservableDoAfterNextTest extends RxJavaTest {

    final List<Integer> values = new ArrayList<>();

    final Consumer<Integer> afterNext = new Consumer<Integer>() {
        @Override

            

Reported by PMD.

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

Line: 34

              
public class ObservableDoAfterNextTest extends RxJavaTest {

    final List<Integer> values = new ArrayList<>();

    final Consumer<Integer> afterNext = new Consumer<Integer>() {
        @Override
        public void accept(Integer e) throws Exception {
            values.add(-e);

            

Reported by PMD.

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

Line: 36

              
    final List<Integer> values = new ArrayList<>();

    final Consumer<Integer> afterNext = new Consumer<Integer>() {
        @Override
        public void accept(Integer e) throws Exception {
            values.add(-e);
        }
    };

            

Reported by PMD.

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

Line: 43

                      }
    };

    final TestObserver<Integer> to = new TestObserver<Integer>() {
        @Override
        public void onNext(Integer t) {
            super.onNext(t);
            ObservableDoAfterNextTest.this.values.add(t);
        }

            

Reported by PMD.

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

Line: 47

                      @Override
        public void onNext(Integer t) {
            super.onNext(t);
            ObservableDoAfterNextTest.this.values.add(t);
        }
    };

    @Test
    public void just() {

            

Reported by PMD.

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

Line: 47

                      @Override
        public void onNext(Integer t) {
            super.onNext(t);
            ObservableDoAfterNextTest.this.values.add(t);
        }
    };

    @Test
    public void just() {

            

Reported by PMD.

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

Line: 47

                      @Override
        public void onNext(Integer t) {
            super.onNext(t);
            ObservableDoAfterNextTest.this.values.add(t);
        }
    };

    @Test
    public void just() {

            

Reported by PMD.

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

Line: 53

              
    @Test
    public void just() {
        Observable.just(1)
        .doAfterNext(afterNext)
        .subscribeWith(to)
        .assertResult(1);

        assertEquals(Arrays.asList(1, -1), values);

            

Reported by PMD.

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

Line: 53

              
    @Test
    public void just() {
        Observable.just(1)
        .doAfterNext(afterNext)
        .subscribeWith(to)
        .assertResult(1);

        assertEquals(Arrays.asList(1, -1), values);

            

Reported by PMD.

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

Line: 53

              
    @Test
    public void just() {
        Observable.just(1)
        .doAfterNext(afterNext)
        .subscribeWith(to)
        .assertResult(1);

        assertEquals(Arrays.asList(1, -1), values);

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/single/SingleSubscribeTest.java
75 issues
This class has too many methods, consider refactoring it.
Design

Line: 32

              import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.testsupport.TestHelper;

public class SingleSubscribeTest extends RxJavaTest {

    @Test
    public void consumer() {
        final Integer[] value = { null };


            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 45

                          }
        });

        assertEquals((Integer)1, value[0]);
    }

    @Test
    public void biconsumer() {
        final Object[] value = { null, null };

            

Reported by PMD.

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

Line: 49

                  }

    @Test
    public void biconsumer() {
        final Object[] value = { null, null };

        Single.just(1).subscribe(new BiConsumer<Integer, Throwable>() {
            @Override
            public void accept(Integer v, Throwable e) throws Exception {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 60

                          }
        });

        assertEquals(1, value[0]);
        assertNull(value[1]);
    }

    @Test
    public void biconsumerError() {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 61

                      });

        assertEquals(1, value[0]);
        assertNull(value[1]);
    }

    @Test
    public void biconsumerError() {
        final Object[] value = { null, null };

            

Reported by PMD.

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

Line: 65

                  }

    @Test
    public void biconsumerError() {
        final Object[] value = { null, null };

        TestException ex = new TestException();

        Single.error(ex).subscribe(new BiConsumer<Object, Throwable>() {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 78

                          }
        });

        assertNull(value[0]);
        assertEquals(ex, value[1]);
    }

    @Test
    public void subscribeThrows() {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 79

                      });

        assertNull(value[0]);
        assertEquals(ex, value[1]);
    }

    @Test
    public void subscribeThrows() {
        try {

            

Reported by PMD.

Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block
Design

Line: 91

                                  throw new IllegalArgumentException();
                }
            }.test();
        } catch (NullPointerException ex) {
            if (!(ex.getCause() instanceof IllegalArgumentException)) {
                fail(ex.toString() + ": should have thrown NPE(IAE)");
            }
        }
    }

            

Reported by PMD.

Avoid catching NullPointerException; consider removing the cause of the NPE.
Error

Line: 91

                                  throw new IllegalArgumentException();
                }
            }.test();
        } catch (NullPointerException ex) {
            if (!(ex.getCause() instanceof IllegalArgumentException)) {
                fail(ex.toString() + ": should have thrown NPE(IAE)");
            }
        }
    }

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/subscribers/LambdaSubscriberTest.java
75 issues
Unit tests should not contain more than 1 assert(s).
Design

Line: 36

              public class LambdaSubscriberTest extends RxJavaTest {

    @Test
    public void onSubscribeThrows() {
        final List<Object> received = new ArrayList<>();

        LambdaSubscriber<Object> subscriber = new LambdaSubscriber<>(new Consumer<Object>() {
            @Override
            public void accept(Object v) throws Exception {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 62

                          }
        });

        assertFalse(subscriber.isDisposed());

        Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

            

Reported by PMD.

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

Line: 64

              
        assertFalse(subscriber.isDisposed());

        Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 67

                      Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());
    }

    @Test

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 69

                      assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());
    }

    @Test
    public void onNextThrows() {
        final List<Object> received = new ArrayList<>();

            

Reported by PMD.

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

Line: 73

                  }

    @Test
    public void onNextThrows() {
        final List<Object> received = new ArrayList<>();

        LambdaSubscriber<Object> subscriber = new LambdaSubscriber<>(new Consumer<Object>() {
            @Override
            public void accept(Object v) throws Exception {

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 99

                          }
        });

        assertFalse(subscriber.isDisposed());

        Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

            

Reported by PMD.

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

Line: 101

              
        assertFalse(subscriber.isDisposed());

        Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 104

                      Flowable.just(1).subscribe(subscriber);

        assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());
    }

    @Test

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 106

                      assertTrue(received.toString(), received.get(0) instanceof TestException);
        assertEquals(received.toString(), 1, received.size());

        assertTrue(subscriber.isDisposed());
    }

    @Test
    public void onErrorThrows() {
        List<Throwable> errors = TestHelper.trackPluginErrors();

            

Reported by PMD.

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

Line: 36

              import io.reactivex.rxjava3.subjects.*;
import io.reactivex.rxjava3.testsupport.TestHelper;

public class SingleDelayTest extends RxJavaTest {
    @Test
    public void delayOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler)

            

Reported by PMD.

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

Line: 38

              
public class SingleDelayTest extends RxJavaTest {
    @Test
    public void delayOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler)
            .test();


            

Reported by PMD.

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

Line: 40

                  @Test
    public void delayOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler)
            .test();

        scheduler.advanceTimeTo(2, TimeUnit.SECONDS);
        observer.assertNoValues();

            

Reported by PMD.

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

Line: 40

                  @Test
    public void delayOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler)
            .test();

        scheduler.advanceTimeTo(2, TimeUnit.SECONDS);
        observer.assertNoValues();

            

Reported by PMD.

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

Line: 45

                          .test();

        scheduler.advanceTimeTo(2, TimeUnit.SECONDS);
        observer.assertNoValues();

        scheduler.advanceTimeTo(5, TimeUnit.SECONDS);
        observer.assertValue(1);
    }


            

Reported by PMD.

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

Line: 48

                      observer.assertNoValues();

        scheduler.advanceTimeTo(5, TimeUnit.SECONDS);
        observer.assertValue(1);
    }

    @Test
    public void delayOnError() {
        final TestScheduler scheduler = new TestScheduler();

            

Reported by PMD.

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

Line: 52

                  }

    @Test
    public void delayOnError() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<?> observer = Single.error(new TestException())
            .delay(5, TimeUnit.SECONDS, scheduler)
            .test();


            

Reported by PMD.

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

Line: 63

                  }

    @Test
    public void delayedErrorOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler, true)
            .test();


            

Reported by PMD.

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

Line: 65

                  @Test
    public void delayedErrorOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler, true)
            .test();

        scheduler.advanceTimeTo(2, TimeUnit.SECONDS);
        observer.assertNoValues();

            

Reported by PMD.

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

Line: 65

                  @Test
    public void delayedErrorOnSuccess() {
        final TestScheduler scheduler = new TestScheduler();
        final TestObserver<Integer> observer = Single.just(1)
            .delay(5, TimeUnit.SECONDS, scheduler, true)
            .test();

        scheduler.advanceTimeTo(2, TimeUnit.SECONDS);
        observer.assertNoValues();

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableTakeTest2.java
74 issues
This class has too many methods, consider refactoring it.
Design

Line: 33

              import io.reactivex.rxjava3.testsupport.TestHelper;

// moved tests from FlowableLimitTest to here (limit removed as operator)
public class FlowableTakeTest2 extends RxJavaTest implements LongConsumer, Action {

    final List<Long> requests = new ArrayList<>();

    static final Long CANCELLED = -100L;


            

Reported by PMD.

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

Line: 35

              // moved tests from FlowableLimitTest to here (limit removed as operator)
public class FlowableTakeTest2 extends RxJavaTest implements LongConsumer, Action {

    final List<Long> requests = new ArrayList<>();

    static final Long CANCELLED = -100L;

    @Override
    public void accept(long t) throws Exception {

            

Reported by PMD.

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

Line: 51

              
    @Test
    public void shorterSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .take(6)
        .test()
        .assertResult(1, 2, 3, 4, 5);


            

Reported by PMD.

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

Line: 51

              
    @Test
    public void shorterSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .take(6)
        .test()
        .assertResult(1, 2, 3, 4, 5);


            

Reported by PMD.

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

Line: 51

              
    @Test
    public void shorterSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .take(6)
        .test()
        .assertResult(1, 2, 3, 4, 5);


            

Reported by PMD.

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

Line: 51

              
    @Test
    public void shorterSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .take(6)
        .test()
        .assertResult(1, 2, 3, 4, 5);


            

Reported by PMD.

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

Line: 57

                      .test()
        .assertResult(1, 2, 3, 4, 5);

        assertEquals(6, requests.get(0).intValue());
    }

    @Test
    public void exactSequence() {
        Flowable.range(1, 5)

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 57

                      .test()
        .assertResult(1, 2, 3, 4, 5);

        assertEquals(6, requests.get(0).intValue());
    }

    @Test
    public void exactSequence() {
        Flowable.range(1, 5)

            

Reported by PMD.

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

Line: 61

                  }

    @Test
    public void exactSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .doOnCancel(this)
        .take(5)
        .test()

            

Reported by PMD.

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

Line: 62

              
    @Test
    public void exactSequence() {
        Flowable.range(1, 5)
        .doOnRequest(this)
        .doOnCancel(this)
        .take(5)
        .test()
        .assertResult(1, 2, 3, 4, 5);

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureReduceWithTest.java
74 issues
System.out.println is used
Design

Line: 198

              
    private <T> void assertValuesDropped(TestSubscriberEx<T> ts, int totalValues) {
        int n = ts.values().size();
        System.out.println("testAsynchronousDrop -> " + n);
        Assert.assertTrue("All events received?", n < totalValues);
    }

    private void assertIncreasingSequence(TestSubscriberEx<Integer> ts) {
        int previous = 0;

            

Reported by PMD.

This class has too many methods, consider refactoring it.
Design

Line: 31

              import java.util.*;
import java.util.concurrent.TimeUnit;

public class FlowableOnBackpressureReduceWithTest extends RxJavaTest {

    private static <T> BiFunction<List<T>, T, List<T>> createTestReducer() {
        return (list, number) -> {
            list.add(number);
            return list;

            

Reported by PMD.

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

Line: 45

                  }

    @Test
    public void simple() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>();

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();

            

Reported by PMD.

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

Line: 48

                  public void simple() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>();

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();
        ts.assertTerminated();
        ts.assertValues(
                Collections.singletonList(1),

            

Reported by PMD.

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

Line: 48

                  public void simple() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>();

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();
        ts.assertTerminated();
        ts.assertValues(
                Collections.singletonList(1),

            

Reported by PMD.

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

Line: 62

                  }

    @Test
    public void simpleError() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>();

        Flowable.range(1, 5).concatWith(Flowable.error(new TestException()))
                .onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);


            

Reported by PMD.

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

Line: 80

                  }

    @Test
    public void simpleBackpressure() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>(2L);

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();

            

Reported by PMD.

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

Line: 83

                  public void simpleBackpressure() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>(2L);

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();
        ts.assertValues(
                Collections.singletonList(1),
                Collections.singletonList(2)

            

Reported by PMD.

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

Line: 83

                  public void simpleBackpressure() {
        TestSubscriberEx<List<Integer>> ts = new TestSubscriberEx<>(2L);

        Flowable.range(1, 5).onBackpressureReduce(createTestSupplier(), createTestReducer()).subscribe(ts);

        ts.assertNoErrors();
        ts.assertValues(
                Collections.singletonList(1),
                Collections.singletonList(2)

            

Reported by PMD.

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

Line: 94

                  }

    @Test
    public void reduceBackpressuredSync() {
        PublishProcessor<Integer> source = PublishProcessor.create();
        TestSubscriberEx<Integer> ts = new TestSubscriberEx<>(0L);

        source.onBackpressureReduce(() -> 0, Integer::sum).subscribe(ts);


            

Reported by PMD.

src/main/java/io/reactivex/rxjava3/core/Maybe.java
73 issues
Avoid throwing null pointer exceptions.
Design

Line: 5382

                          Exceptions.throwIfFatal(ex);
            NullPointerException npe = new NullPointerException("subscribeActual failed");
            npe.initCause(ex);
            throw npe;
        }
    }

    /**
     * Implement this method in subclasses to handle the incoming {@link MaybeObserver}s.

            

Reported by PMD.

Avoid reassigning parameters such as 'observer'
Design

Line: 5367

              
    @SchedulerSupport(SchedulerSupport.NONE)
    @Override
    public final void subscribe(@NonNull MaybeObserver<? super T> observer) {
        Objects.requireNonNull(observer, "observer is null");

        observer = RxJavaPlugins.onSubscribe(this, observer);

        Objects.requireNonNull(observer, "The RxJavaPlugins.onSubscribe hook returned a null MaybeObserver. Please check the handler provided to RxJavaPlugins.setOnMaybeSubscribe for invalid null returns. Further reading: https://github.com/ReactiveX/RxJava/wiki/Plugins");

            

Reported by PMD.

This class has a bunch of public methods and attributes
Design

Line: 14

               * the License for the specific language governing permissions and limitations under the License.
 */

package io.reactivex.rxjava3.core;

import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;


            

Reported by PMD.

Avoid really long classes.
Design

Line: 113

               * @since 2.0
 * @see io.reactivex.rxjava3.observers.DisposableMaybeObserver
 */
public abstract class Maybe<T> implements MaybeSource<T> {

    /**
     * Runs multiple {@link MaybeSource}s provided by an {@link Iterable} sequence and
     * signals the events of the first one that signals (disposing the rest).
     * <p>

            

Reported by PMD.

This class has too many methods, consider refactoring it.
Design

Line: 113

               * @since 2.0
 * @see io.reactivex.rxjava3.observers.DisposableMaybeObserver
 */
public abstract class Maybe<T> implements MaybeSource<T> {

    /**
     * Runs multiple {@link MaybeSource}s provided by an {@link Iterable} sequence and
     * signals the events of the first one that signals (disposing the rest).
     * <p>

            

Reported by PMD.

The class 'Maybe' has a total cyclomatic complexity of 219 (highest 5).
Design

Line: 113

               * @since 2.0
 * @see io.reactivex.rxjava3.observers.DisposableMaybeObserver
 */
public abstract class Maybe<T> implements MaybeSource<T> {

    /**
     * Runs multiple {@link MaybeSource}s provided by an {@link Iterable} sequence and
     * signals the events of the first one that signals (disposing the rest).
     * <p>

            

Reported by PMD.

Possible God Class (WMC=219, ATFD=51, TCC=0.000%)
Design

Line: 113

               * @since 2.0
 * @see io.reactivex.rxjava3.observers.DisposableMaybeObserver
 */
public abstract class Maybe<T> implements MaybeSource<T> {

    /**
     * Runs multiple {@link MaybeSource}s provided by an {@link Iterable} sequence and
     * signals the events of the first one that signals (disposing the rest).
     * <p>

            

Reported by PMD.

The String literal 'sources is null' appears 14 times in this file; the first occurrence is on line 134
Error

Line: 134

                  @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <@NonNull T> Maybe<T> amb(@NonNull Iterable<@NonNull ? extends MaybeSource<? extends T>> sources) {
        Objects.requireNonNull(sources, "sources is null");
        return RxJavaPlugins.onAssembly(new MaybeAmb<>(null, sources));
    }

    /**
     * Runs multiple {@link MaybeSource}s and signals the events of the first one that signals (disposing

            

Reported by PMD.

Avoid using Literals in Conditional Statements
Error

Line: 162

                      if (sources.length == 0) {
            return empty();
        }
        if (sources.length == 1) {
            @SuppressWarnings("unchecked")
            MaybeSource<T> source = (MaybeSource<T>)sources[0];
            return wrap(source);
        }
        return RxJavaPlugins.onAssembly(new MaybeAmb<>(sources, null));

            

Reported by PMD.

The String literal 'unchecked' appears 20 times in this file; the first occurrence is on line 163
Error

Line: 163

                          return empty();
        }
        if (sources.length == 1) {
            @SuppressWarnings("unchecked")
            MaybeSource<T> source = (MaybeSource<T>)sources[0];
            return wrap(source);
        }
        return RxJavaPlugins.onAssembly(new MaybeAmb<>(sources, null));
    }

            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableThrottleLatestTest.java
73 issues
JUnit tests should include assert() or fail()
Design

Line: 33

              public class ObservableThrottleLatestTest extends RxJavaTest {

    @Test
    public void just() {
        Observable.just(1)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }

            

Reported by PMD.

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

Line: 34

              
    @Test
    public void just() {
        Observable.just(1)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 34

              
    @Test
    public void just() {
        Observable.just(1)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 34

              
    @Test
    public void just() {
        Observable.just(1)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 41

                  }

    @Test
    public void range() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }

            

Reported by PMD.

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

Line: 42

              
    @Test
    public void range() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 42

              
    @Test
    public void range() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 42

              
    @Test
    public void range() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES)
        .test()
        .assertResult(1);
    }


            

Reported by PMD.

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

Line: 49

                  }

    @Test
    public void rangeEmitLatest() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES, true)
        .test()
        .assertResult(1, 5);
    }

            

Reported by PMD.

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

Line: 50

              
    @Test
    public void rangeEmitLatest() {
        Observable.range(1, 5)
        .throttleLatest(1, TimeUnit.MINUTES, true)
        .test()
        .assertResult(1, 5);
    }


            

Reported by PMD.

src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableReduceTest.java
73 issues
This class has too many methods, consider refactoring it.
Design

Line: 32

              import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.testsupport.TestHelper;

public class ObservableReduceTest extends RxJavaTest {
    Observer<Object> observer;
    SingleObserver<Object> singleObserver;

    @Before
    public void before() {

            

Reported by PMD.

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

Line: 33

              import io.reactivex.rxjava3.testsupport.TestHelper;

public class ObservableReduceTest extends RxJavaTest {
    Observer<Object> observer;
    SingleObserver<Object> singleObserver;

    @Before
    public void before() {
        observer = TestHelper.mockObserver();

            

Reported by PMD.

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

Line: 34

              
public class ObservableReduceTest extends RxJavaTest {
    Observer<Object> observer;
    SingleObserver<Object> singleObserver;

    @Before
    public void before() {
        observer = TestHelper.mockObserver();
        singleObserver = TestHelper.mockSingleObserver();

            

Reported by PMD.

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

Line: 42

                      singleObserver = TestHelper.mockSingleObserver();
    }

    BiFunction<Integer, Integer, Integer> sum = new BiFunction<Integer, Integer, Integer>() {
        @Override
        public Integer apply(Integer t1, Integer t2) {
            return t1 + t2;
        }
    };

            

Reported by PMD.

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

Line: 62

              
        result.subscribe(observer);

        verify(observer).onNext(1 + 2 + 3 + 4 + 5);
        verify(observer).onComplete();
        verify(observer, never()).onError(any(Throwable.class));
    }

    @Test

            

Reported by PMD.

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

Line: 63

                      result.subscribe(observer);

        verify(observer).onNext(1 + 2 + 3 + 4 + 5);
        verify(observer).onComplete();
        verify(observer, never()).onError(any(Throwable.class));
    }

    @Test
    public void aggregateAsIntSumSourceThrowsObservable() {

            

Reported by PMD.

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

Line: 64

              
        verify(observer).onNext(1 + 2 + 3 + 4 + 5);
        verify(observer).onComplete();
        verify(observer, never()).onError(any(Throwable.class));
    }

    @Test
    public void aggregateAsIntSumSourceThrowsObservable() {
        Observable<Integer> result = Observable.concat(Observable.just(1, 2, 3, 4, 5),

            

Reported by PMD.

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

Line: 80

              
        result.subscribe(observer);

        verify(observer, never()).onNext(any());
        verify(observer, never()).onComplete();
        verify(observer, times(1)).onError(any(TestException.class));
    }

    @Test

            

Reported by PMD.

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

Line: 81

                      result.subscribe(observer);

        verify(observer, never()).onNext(any());
        verify(observer, never()).onComplete();
        verify(observer, times(1)).onError(any(TestException.class));
    }

    @Test
    public void aggregateAsIntSumAccumulatorThrowsObservable() {

            

Reported by PMD.

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

Line: 82

              
        verify(observer, never()).onNext(any());
        verify(observer, never()).onComplete();
        verify(observer, times(1)).onError(any(TestException.class));
    }

    @Test
    public void aggregateAsIntSumAccumulatorThrowsObservable() {
        BiFunction<Integer, Integer, Integer> sumErr = new BiFunction<Integer, Integer, Integer>() {

            

Reported by PMD.