From 6da9df3d96b90e4c10f862b9309e2830a4741140 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Mon, 23 Jan 2023 20:37:06 +0900 Subject: [PATCH 01/30] Remove obsolete JFrog references in README.md (#7519) --- README.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/README.md b/README.md index 53a42ee983..3d86f2fe93 100644 --- a/README.md +++ b/README.md @@ -579,19 +579,6 @@ dependencies { } ``` -Snapshots before May 1st, 2021 are available via https://oss.jfrog.org/libs-snapshot/io/reactivex/rxjava3/rxjava/ -(Note that due to the Sunset of Bintray, our jfrog access has been severed, hence the new snapshot repo above.) - -```groovy -repositories { - maven { url 'https://oss.jfrog.org/libs-snapshot' } -} - -dependencies { - implementation 'io.reactivex.rxjava3:rxjava:3.0.0-SNAPSHOT' -} -``` - JavaDoc snapshots are available at http://reactivex.io/RxJava/3.x/javadoc/snapshot ## Build From 0eea996dc8afde11f7cd89a032f5a38e0d3affc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 14:17:28 +0100 Subject: [PATCH 02/30] Bump gradle/wrapper-validation-action from 1.0.5 to 1.0.6 (#7530) Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 1.0.5 to 1.0.6. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/v1.0.5...v1.0.6) --- updated-dependencies: - dependency-name: gradle/wrapper-validation-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index ba8bcb2bdb..64eb5bdee0 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1.0.5 + - uses: gradle/wrapper-validation-action@v1.0.6 From 3468c8bfa1be6e12396c3b594d95f6c7f60eab77 Mon Sep 17 00:00:00 2001 From: Ruben Novelli <31356779+rdnovell@users.noreply.github.com> Date: Tue, 7 Mar 2023 14:12:01 +0100 Subject: [PATCH 03/30] Change summary to caption, because summary is obsolete in HTML5 (#7534) Co-authored-by: Ruben Novelli --- src/main/java/io/reactivex/rxjava3/observers/package-info.java | 3 ++- src/main/java/io/reactivex/rxjava3/subjects/package-info.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/observers/package-info.java b/src/main/java/io/reactivex/rxjava3/observers/package-info.java index ca7ea67c0c..09f56f3eb0 100644 --- a/src/main/java/io/reactivex/rxjava3/observers/package-info.java +++ b/src/main/java/io/reactivex/rxjava3/observers/package-info.java @@ -20,7 +20,8 @@ *

* Available observer variants *
- * + *
+ * * * * diff --git a/src/main/java/io/reactivex/rxjava3/subjects/package-info.java b/src/main/java/io/reactivex/rxjava3/subjects/package-info.java index 60c09e10c0..a2736d7eee 100644 --- a/src/main/java/io/reactivex/rxjava3/subjects/package-info.java +++ b/src/main/java/io/reactivex/rxjava3/subjects/package-info.java @@ -18,7 +18,8 @@ *

* Available subject classes with their respective base classes and consumer interfaces: *
- *

The available observer types.
Reactive typeBase interfaceSimpleDisposableResource
{@link io.reactivex.rxjava3.core.Observable Observable}
+ *
+ * * * *
The available subject classes with their respective base classes and consumer interfaces.
Subject typeBase classConsumer interface
{@link io.reactivex.rxjava3.subjects.Subject Subject} From ed674be204210fe0804d64e28fdd356745915048 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Tue, 7 Mar 2023 14:53:41 +0100 Subject: [PATCH 04/30] 3.x: Try using https to access the reactive streams javadoc (#7535) * Update build.gradle * Self-hosting the Reactive Streams Javadoc It was build with JDK 9 and lacks the `package-list` file that is required by JDK 8 Javadoc. I had to unpack the official `-javadoc.jar` from maven and copy-pasted the `elements-list` as `package-list`. Let's hope it works. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69d41f1dfd..db0bb1db45 100644 --- a/build.gradle +++ b/build.gradle @@ -76,7 +76,7 @@ javadoc { options.links( "https://docs.oracle.com/javase/8/docs/api/", - "http://www.reactive-streams.org/reactive-streams-${reactiveStreamsVersion}-javadoc/" + "https://reactivex.io/RxJava/org.reactivestreams.javadoc/${reactiveStreamsVersion}/" ) finalizedBy javadocCleanup From bfe4aba423d03c28394831bfee8eb964f586d730 Mon Sep 17 00:00:00 2001 From: Joyce Date: Tue, 14 Mar 2023 17:36:31 -0300 Subject: [PATCH 05/30] Add minimum GitHub token permissions for workflows (#7541) * Update gradle_release.yml to contents write * Update gradle_snapshot.yml to contents write --- .github/workflows/gradle_release.yml | 5 +++++ .github/workflows/gradle_snapshot.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index da5931624c..1a32ddb249 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -10,10 +10,15 @@ on: tags: - 'v3.*.*' +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest + permissions: + contents: write env: CI_BUILD_NUMBER: ${{ github.run_number }} steps: diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index c241705126..8d1be2f111 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -6,12 +6,17 @@ name: Snapshot on: push: branches: [ '3.x' ] + +permissions: + contents: read jobs: build: runs-on: ubuntu-latest if: github.repository == 'ReactiveX/RxJava' + permissions: + contents: write env: # ------------------------------------------------------------------------------ CI_BUILD_NUMBER: ${{ github.run_number }} From 329e8c91c2999826d7e689be754857cd6f9e1f14 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Tue, 14 Mar 2023 22:04:03 +0100 Subject: [PATCH 06/30] Update Disposable.java Trigger a snapshot javadoc update --- .../rxjava3/disposables/Disposable.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/disposables/Disposable.java b/src/main/java/io/reactivex/rxjava3/disposables/Disposable.java index 67fd235086..845d603171 100644 --- a/src/main/java/io/reactivex/rxjava3/disposables/Disposable.java +++ b/src/main/java/io/reactivex/rxjava3/disposables/Disposable.java @@ -40,8 +40,8 @@ public interface Disposable { /** * Construct a {@code Disposable} by wrapping a {@link Runnable} that is * executed exactly once when the {@code Disposable} is disposed. - * @param run the Runnable to wrap - * @return the new Disposable instance + * @param run the {@code Runnable} to wrap + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code run} is {@code null} * @since 3.0.0 */ @@ -54,8 +54,8 @@ static Disposable fromRunnable(@NonNull Runnable run) { /** * Construct a {@code Disposable} by wrapping a {@link Action} that is * executed exactly once when the {@code Disposable} is disposed. - * @param action the Action to wrap - * @return the new Disposable instance + * @param action the {@code Action} to wrap + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code action} is {@code null} * @since 3.0.0 */ @@ -70,8 +70,8 @@ static Disposable fromAction(@NonNull Action action) { * cancelled exactly once when the {@code Disposable} is disposed. *

* The {@code Future} is cancelled with {@code mayInterruptIfRunning == true}. - * @param future the Future to wrap - * @return the new Disposable instance + * @param future the {@code Future} to wrap + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code future} is {@code null} * @see #fromFuture(Future, boolean) * @since 3.0.0 @@ -85,9 +85,9 @@ static Disposable fromFuture(@NonNull Future future) { /** * Construct a {@code Disposable} by wrapping a {@link Future} that is * cancelled exactly once when the {@code Disposable} is disposed. - * @param future the Future to wrap + * @param future the {@code Future} to wrap * @param allowInterrupt if true, the future cancel happens via {@code Future.cancel(true)} - * @return the new Disposable instance + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code future} is {@code null} * @since 3.0.0 */ @@ -100,8 +100,8 @@ static Disposable fromFuture(@NonNull Future future, boolean allowInterrupt) /** * Construct a {@code Disposable} by wrapping a {@link Subscription} that is * cancelled exactly once when the {@code Disposable} is disposed. - * @param subscription the Runnable to wrap - * @return the new Disposable instance + * @param subscription the {@code Runnable} to wrap + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code subscription} is {@code null} * @since 3.0.0 */ @@ -114,8 +114,8 @@ static Disposable fromSubscription(@NonNull Subscription subscription) { /** * Construct a {@code Disposable} by wrapping an {@link AutoCloseable} that is * closed exactly once when the {@code Disposable} is disposed. - * @param autoCloseable the AutoCloseable to wrap - * @return the new Disposable instance + * @param autoCloseable the {@code AutoCloseable} to wrap + * @return the new {@code Disposable} instance * @throws NullPointerException if {@code autoCloseable} is {@code null} * @since 3.0.0 */ @@ -128,8 +128,8 @@ static Disposable fromAutoCloseable(@NonNull AutoCloseable autoCloseable) { /** * Construct an {@link AutoCloseable} by wrapping a {@code Disposable} that is * disposed when the returned {@code AutoCloseable} is closed. - * @param disposable the Disposable instance - * @return the new AutoCloseable instance + * @param disposable the {@code Disposable} instance + * @return the new {@code AutoCloseable} instance * @throws NullPointerException if {@code disposable} is {@code null} * @since 3.0.0 */ From 4e2e9a285ecad85b37d4e0091fff318bae1831aa Mon Sep 17 00:00:00 2001 From: Des Petrov Date: Tue, 21 Mar 2023 19:18:33 +0000 Subject: [PATCH 07/30] Add onDropped callback for onBackpressureLatest - #7458 (#7542) --- .../io/reactivex/rxjava3/core/Flowable.java | 41 +++++++++++- .../FlowableOnBackpressureLatest.java | 26 +++++-- .../FlowableOnBackpressureLatestTest.java | 67 ++++++++++++++++++- 3 files changed, 128 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/core/Flowable.java b/src/main/java/io/reactivex/rxjava3/core/Flowable.java index d9cea6954f..55465fa042 100644 --- a/src/main/java/io/reactivex/rxjava3/core/Flowable.java +++ b/src/main/java/io/reactivex/rxjava3/core/Flowable.java @@ -12755,7 +12755,46 @@ public final Flowable onBackpressureDrop(@NonNull Consumer onDrop) @SchedulerSupport(SchedulerSupport.NONE) @NonNull public final Flowable onBackpressureLatest() { - return RxJavaPlugins.onAssembly(new FlowableOnBackpressureLatest<>(this)); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureLatest<>(this, null)); + } + + /** + * Drops all but the latest item emitted by the current {@code Flowable} if the downstream is not ready to receive + * new items (indicated by a lack of {@link Subscription#request(long)} calls from it) and emits this latest + * item when the downstream becomes ready. + *

+ * + *

+ * Its behavior is logically equivalent to {@code blockingLatest()} with the exception that + * the downstream is not blocking while requesting more values. + *

+ * Note that if the current {@code Flowable} does support backpressure, this operator ignores that capability + * and doesn't propagate any backpressure requests from downstream. + *

+ * Note that due to the nature of how backpressure requests are propagated through subscribeOn/observeOn, + * requesting more than 1 from downstream doesn't guarantee a continuous delivery of {@code onNext} events. + *

+ *
Backpressure:
+ *
The operator honors backpressure from downstream and consumes the current {@code Flowable} in an unbounded + * manner (i.e., not applying backpressure to it).
+ *
Scheduler:
+ *
{@code onBackpressureLatest} does not operate by default on a particular {@link Scheduler}.
+ *
+ * + * @param onDropped + * called with the current entry when it has been replaced by a new one + * @throws NullPointerException if {@code onDropped} is {@code null} + * @return the new {@code Flowable} instance + * @since 3.1.7 + */ + @CheckReturnValue + @BackpressureSupport(BackpressureKind.UNBOUNDED_IN) + @SchedulerSupport(SchedulerSupport.NONE) + @NonNull + @Experimental + public final Flowable onBackpressureLatest(@NonNull Consumer onDropped) { + Objects.requireNonNull(onDropped, "onDropped is null"); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureLatest<>(this, onDropped)); } /** diff --git a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatest.java b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatest.java index 1a98831bd2..155e284e93 100644 --- a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatest.java +++ b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatest.java @@ -14,30 +14,48 @@ package io.reactivex.rxjava3.internal.operators.flowable; import io.reactivex.rxjava3.core.Flowable; +import io.reactivex.rxjava3.exceptions.Exceptions; +import io.reactivex.rxjava3.functions.Consumer; import org.reactivestreams.Subscriber; public final class FlowableOnBackpressureLatest extends AbstractFlowableWithUpstream { - public FlowableOnBackpressureLatest(Flowable source) { + final Consumer onDropped; + + public FlowableOnBackpressureLatest(Flowable source, Consumer onDropped) { super(source); + this.onDropped = onDropped; } @Override protected void subscribeActual(Subscriber s) { - source.subscribe(new BackpressureLatestSubscriber<>(s)); + source.subscribe(new BackpressureLatestSubscriber<>(s, onDropped)); } static final class BackpressureLatestSubscriber extends AbstractBackpressureThrottlingSubscriber { private static final long serialVersionUID = 163080509307634843L; - BackpressureLatestSubscriber(Subscriber downstream) { + final Consumer onDropped; + + BackpressureLatestSubscriber(Subscriber downstream, + Consumer onDropped) { super(downstream); + this.onDropped = onDropped; } @Override public void onNext(T t) { - current.lazySet(t); + T oldValue = current.getAndSet(t); + if (onDropped != null && oldValue != null) { + try { + onDropped.accept(oldValue); + } catch (Throwable ex) { + Exceptions.throwIfFatal(ex); + upstream.cancel(); + downstream.onError(ex); + } + } drain(); } } diff --git a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatestTest.java b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatestTest.java index eb4cfaf288..f0d50994ed 100644 --- a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatestTest.java +++ b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureLatestTest.java @@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit; import org.junit.*; +import org.mockito.InOrder; import org.reactivestreams.Publisher; import io.reactivex.rxjava3.core.*; @@ -27,6 +28,8 @@ import io.reactivex.rxjava3.subscribers.TestSubscriber; import io.reactivex.rxjava3.testsupport.*; +import static org.mockito.Mockito.inOrder; + public class FlowableOnBackpressureLatestTest extends RxJavaTest { @Test public void simple() { @@ -62,6 +65,68 @@ public void simpleBackpressure() { ts.assertNotComplete(); } + @Test + public void simpleBackpressureWithOnDroppedCallback() { + PublishProcessor source = PublishProcessor.create(); + TestSubscriberEx ts = new TestSubscriberEx<>(0L); + + Observer dropCallbackObserver = TestHelper.mockObserver(); + + source.onBackpressureLatest(dropCallbackObserver::onNext) + .subscribe(ts); + + ts.assertNoValues(); + + source.onNext(1); + source.onNext(2); + source.onNext(3); + + ts.request(1); + + ts.assertValues(3); + + source.onNext(4); + source.onNext(5); + + ts.request(2); + + ts.assertValues(3,5); + + InOrder dropCallbackOrder = inOrder(dropCallbackObserver); + dropCallbackOrder.verify(dropCallbackObserver).onNext(1); + dropCallbackOrder.verify(dropCallbackObserver).onNext(2); + dropCallbackOrder.verify(dropCallbackObserver).onNext(4); + dropCallbackOrder.verifyNoMoreInteractions(); + } + + @Test + public void simpleBackpressureWithOnDroppedCallbackEx() { + PublishProcessor source = PublishProcessor.create(); + TestSubscriberEx ts = new TestSubscriberEx<>(0L); + + source.onBackpressureLatest(e -> { + if (e == 3) { + throw new TestException("forced"); + } + }) + .subscribe(ts); + + ts.assertNoValues(); + + source.onNext(1); + source.onNext(2); + + ts.request(1); + + ts.assertValues(2); + + source.onNext(3); + source.onNext(4); + + ts.assertError(TestException.class); + ts.assertValues(2); + } + @Test public void synchronousDrop() { PublishProcessor source = PublishProcessor.create(); @@ -105,7 +170,7 @@ public void synchronousDrop() { } @Test - public void asynchronousDrop() throws InterruptedException { + public void asynchronousDrop() { TestSubscriberEx ts = new TestSubscriberEx(1L) { final Random rnd = new Random(); @Override From 06e52db5356c7cda93480e5019959ff5c651938e Mon Sep 17 00:00:00 2001 From: Joyce Date: Tue, 21 Mar 2023 16:31:12 -0300 Subject: [PATCH 08/30] Create SECURITY.md (#7546) Signed-off-by: Joyce --- SECURITY.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..1003574331 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released. + +Please disclose it at [security advisory](https://github.com/ReactiveX/RxJava/security/advisories/new). + +This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure. From 9cd59f173cb5fbef9fdbb8cea17b8189eef86273 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 11:42:14 +0200 Subject: [PATCH 09/30] Bump actions/cache from 3.0.11 to 3.3.1 (#7539) Bumps [actions/cache](https://github.com/actions/cache) from 3.0.11 to 3.3.1. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3.0.11...v3.3.1) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle_branch.yml | 2 +- .github/workflows/gradle_jdk11.yml | 2 +- .github/workflows/gradle_pr.yml | 2 +- .github/workflows/gradle_release.yml | 2 +- .github/workflows/gradle_snapshot.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index 7651fade8e..a28d422afe 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -22,7 +22,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index 814540148b..b02da5c18c 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -24,7 +24,7 @@ jobs: distribution: 'zulu' java-version: '11' - name: Cache Gradle packages - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index c240adbd8e..71b63a227b 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -22,7 +22,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index 1a32ddb249..067050c4fa 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -29,7 +29,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index 8d1be2f111..b6a481ab16 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -28,7 +28,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} From df3c2b9b63ccd18944c62fc41bf812000a7d2a4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 11:42:44 +0200 Subject: [PATCH 10/30] Bump ru.vyarus.animalsniffer from 1.6.0 to 1.7.0 (#7525) Bumps ru.vyarus.animalsniffer from 1.6.0 to 1.7.0. --- updated-dependencies: - dependency-name: ru.vyarus.animalsniffer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index db0bb1db45..6bc9998725 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id("eclipse") id("jacoco") id("maven-publish") - id("ru.vyarus.animalsniffer") version "1.6.0" + id("ru.vyarus.animalsniffer") version "1.7.0" id("me.champeau.gradle.jmh") version "0.5.3" id("com.github.hierynomus.license") version "0.16.1" id("biz.aQute.bnd.builder") version "6.4.0" From 067f3cb9ac26a4661ecbeb11f5b5d04adcb47e82 Mon Sep 17 00:00:00 2001 From: tobi5775 <50146675+tobi5775@users.noreply.github.com> Date: Mon, 22 May 2023 11:44:46 +0200 Subject: [PATCH 11/30] add copyright and license to jar (#7520) * add copyright and license to jar * add copyright and license to META-INF --- COPYRIGHT | 13 +++++++++++++ build.gradle | 6 ++++++ 2 files changed, 19 insertions(+) create mode 100644 COPYRIGHT diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 0000000000..5d2c6e53f3 --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1,13 @@ +Copyright (c) 2016-present, RxJava Contributors. + +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. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 6bc9998725..ad48b5a6e2 100644 --- a/build.gradle +++ b/build.gradle @@ -87,6 +87,12 @@ animalsniffer { } jar { + from('.') { + include 'LICENSE' + include 'COPYRIGHT' + into('META-INF/') + } + // Cover for bnd still not supporting MR Jars: https://github.com/bndtools/bnd/issues/2227 bnd('-fixupmessages': '^Classes found in the wrong directory: \\\\{META-INF/versions/9/module-info\\\\.class=module-info}$') bnd( From 919d310ac1f73959ddea7a0e8e1d1c773b33bc01 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Tue, 23 May 2023 10:08:58 +0200 Subject: [PATCH 12/30] 3.x: Add onDropped callback to onBackpressureBuffer (#7567) * 3.x: Add onDropped callback to onBackpressureBuffer Related #7458 * MBE is expected * Annotate with experimental --- .../io/reactivex/rxjava3/core/Flowable.java | 98 ++++++++++++++++- .../FlowableOnBackpressureBuffer.java | 13 ++- .../FlowableOnBackpressureBufferStrategy.java | 58 +++++++--- ...wableOnBackpressureBufferStrategyTest.java | 101 +++++++++++++++++- .../FlowableOnBackpressureBufferTest.java | 48 +++++++++ .../ParamValidationCheckerTest.java | 1 + 6 files changed, 293 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/core/Flowable.java b/src/main/java/io/reactivex/rxjava3/core/Flowable.java index 55465fa042..4d277ab08b 100644 --- a/src/main/java/io/reactivex/rxjava3/core/Flowable.java +++ b/src/main/java/io/reactivex/rxjava3/core/Flowable.java @@ -12546,7 +12546,7 @@ public final Flowable onBackpressureBuffer(int capacity, boolean delayError) @NonNull public final Flowable onBackpressureBuffer(int capacity, boolean delayError, boolean unbounded) { ObjectHelper.verifyPositive(capacity, "capacity"); - return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBuffer<>(this, capacity, unbounded, delayError, Functions.EMPTY_ACTION)); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBuffer<>(this, capacity, unbounded, delayError, Functions.EMPTY_ACTION, Functions.emptyConsumer())); } /** @@ -12577,6 +12577,7 @@ public final Flowable onBackpressureBuffer(int capacity, boolean delayError, * @throws NullPointerException if {@code onOverflow} is {@code null} * @throws IllegalArgumentException if {@code capacity} is non-positive * @see ReactiveX operators documentation: backpressure operators + * @see #onBackpressureBuffer(int, boolean, boolean, Action, Consumer) * @since 1.1.0 */ @CheckReturnValue @@ -12587,7 +12588,51 @@ public final Flowable onBackpressureBuffer(int capacity, boolean delayError, @NonNull Action onOverflow) { Objects.requireNonNull(onOverflow, "onOverflow is null"); ObjectHelper.verifyPositive(capacity, "capacity"); - return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBuffer<>(this, capacity, unbounded, delayError, onOverflow)); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBuffer<>(this, capacity, unbounded, delayError, onOverflow, Functions.emptyConsumer())); + } + + /** + * Buffers an optionally unlimited number of items from the current {@code Flowable} and allows it to emit as fast it can while allowing the + * downstream to consume the items at its own place. + * If {@code unbounded} is {@code true}, the resulting {@code Flowable} will signal a + * {@link MissingBackpressureException} via {@code onError} as soon as the buffer's capacity is exceeded, dropping all undelivered + * items, canceling the flow and calling the {@code onOverflow} action. + *

+ * + *

+ *
Backpressure:
+ *
The operator honors backpressure from downstream and consumes the current {@code Flowable} in an unbounded + * manner (i.e., not applying backpressure to it).
+ *
Scheduler:
+ *
{@code onBackpressureBuffer} does not operate by default on a particular {@link Scheduler}.
+ *
+ * + * @param capacity number of slots available in the buffer. + * @param delayError + * if {@code true}, an exception from the current {@code Flowable} is delayed until all buffered elements have been + * consumed by the downstream; if {@code false}, an exception is immediately signaled to the downstream, skipping + * any buffered element + * @param unbounded + * if {@code true}, the capacity value is interpreted as the internal "island" size of the unbounded buffer + * @param onOverflow action to execute if an item needs to be buffered, but there are no available slots. + * @param onDropped the {@link Consumer} to be called with the item that could not be buffered due to capacity constraints. + * @return the new {@code Flowable} instance + * @throws NullPointerException if {@code onOverflow} or {@code onDropped} is {@code null} + * @throws IllegalArgumentException if {@code capacity} is non-positive + * @see ReactiveX operators documentation: backpressure operators + * @since 3.1.7 + */ + @CheckReturnValue + @NonNull + @BackpressureSupport(BackpressureKind.SPECIAL) + @SchedulerSupport(SchedulerSupport.NONE) + @Experimental + public final Flowable onBackpressureBuffer(int capacity, boolean delayError, boolean unbounded, + @NonNull Action onOverflow, @NonNull Consumer onDropped) { + Objects.requireNonNull(onOverflow, "onOverflow is null"); + Objects.requireNonNull(onDropped, "onDropped is null"); + ObjectHelper.verifyPositive(capacity, "capacity"); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBuffer<>(this, capacity, unbounded, delayError, onOverflow, onDropped)); } /** @@ -12653,6 +12698,7 @@ public final Flowable onBackpressureBuffer(int capacity, @NonNull Action onOv * @throws NullPointerException if {@code onOverflow} or {@code overflowStrategy} is {@code null} * @throws IllegalArgumentException if {@code capacity} is non-positive * @see ReactiveX operators documentation: backpressure operators + * @see #onBackpressureBuffer(long, Action, BackpressureOverflowStrategy) * @since 2.0 */ @CheckReturnValue @@ -12662,9 +12708,55 @@ public final Flowable onBackpressureBuffer(int capacity, @NonNull Action onOv public final Flowable onBackpressureBuffer(long capacity, @Nullable Action onOverflow, @NonNull BackpressureOverflowStrategy overflowStrategy) { Objects.requireNonNull(overflowStrategy, "overflowStrategy is null"); ObjectHelper.verifyPositive(capacity, "capacity"); - return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBufferStrategy<>(this, capacity, onOverflow, overflowStrategy)); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBufferStrategy<>(this, capacity, onOverflow, overflowStrategy, null)); } + /** + * Buffers an optionally unlimited number of items from the current {@code Flowable} and allows it to emit as fast it can while allowing the + * downstream to consume the items at its own place. + * The resulting {@code Flowable} will behave as determined by {@code overflowStrategy} if the buffer capacity is exceeded: + *
    + *
  • {@link BackpressureOverflowStrategy#ERROR} (default) will call {@code onError} dropping all undelivered items, + * canceling the source, and notifying the producer with {@code onOverflow}.
  • + *
  • {@link BackpressureOverflowStrategy#DROP_LATEST} will drop any new items emitted by the producer while + * the buffer is full, without generating any {@code onError}. Each drop will, however, invoke {@code onOverflow} + * to signal the overflow to the producer.
  • + *
  • {@link BackpressureOverflowStrategy#DROP_OLDEST} will drop the oldest items in the buffer in order to make + * room for newly emitted ones. Overflow will not generate an {@code onError}, but each drop will invoke + * {@code onOverflow} to signal the overflow to the producer.
  • + *
+ * + *

+ * + *

+ *
Backpressure:
+ *
The operator honors backpressure from downstream and consumes the current {@code Flowable} in an unbounded + * manner (i.e., not applying backpressure to it).
+ *
Scheduler:
+ *
{@code onBackpressureBuffer} does not operate by default on a particular {@link Scheduler}.
+ *
+ * + * @param capacity number of slots available in the buffer. + * @param onOverflow action to execute if an item needs to be buffered, but there are no available slots, {@code null} is allowed. + * @param overflowStrategy how should the resulting {@code Flowable} react to buffer overflows, {@code null} is not allowed. + * @param onDropped the {@link Consumer} to be called with the item that could not be buffered due to capacity constraints. + * @return the new {@code Flowable} instance + * @throws NullPointerException if {@code onOverflow}, {@code overflowStrategy} or {@code onDropped} is {@code null} + * @throws IllegalArgumentException if {@code capacity} is non-positive + * @see ReactiveX operators documentation: backpressure operators + * @since 3.1.7 + */ + @CheckReturnValue + @NonNull + @BackpressureSupport(BackpressureKind.SPECIAL) + @SchedulerSupport(SchedulerSupport.NONE) + @Experimental + public final Flowable onBackpressureBuffer(long capacity, @Nullable Action onOverflow, @NonNull BackpressureOverflowStrategy overflowStrategy, @NonNull Consumer onDropped) { + Objects.requireNonNull(overflowStrategy, "overflowStrategy is null"); + Objects.requireNonNull(onDropped, "onDropped is null"); + ObjectHelper.verifyPositive(capacity, "capacity"); + return RxJavaPlugins.onAssembly(new FlowableOnBackpressureBufferStrategy<>(this, capacity, onOverflow, overflowStrategy, onDropped)); + } /** * Drops items from the current {@code Flowable} if the downstream is not ready to receive new items (indicated * by a lack of {@link Subscription#request(long)} calls from it). diff --git a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBuffer.java b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBuffer.java index 8261df29dc..db58b68a10 100644 --- a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBuffer.java +++ b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBuffer.java @@ -20,7 +20,7 @@ import io.reactivex.rxjava3.annotations.Nullable; import io.reactivex.rxjava3.core.*; import io.reactivex.rxjava3.exceptions.*; -import io.reactivex.rxjava3.functions.Action; +import io.reactivex.rxjava3.functions.*; import io.reactivex.rxjava3.internal.subscriptions.*; import io.reactivex.rxjava3.internal.util.BackpressureHelper; import io.reactivex.rxjava3.operators.*; @@ -30,19 +30,21 @@ public final class FlowableOnBackpressureBuffer extends AbstractFlowableWithU final boolean unbounded; final boolean delayError; final Action onOverflow; + final Consumer onDropped; public FlowableOnBackpressureBuffer(Flowable source, int bufferSize, boolean unbounded, - boolean delayError, Action onOverflow) { + boolean delayError, Action onOverflow, Consumer onDropped) { super(source); this.bufferSize = bufferSize; this.unbounded = unbounded; this.delayError = delayError; this.onOverflow = onOverflow; + this.onDropped = onDropped; } @Override protected void subscribeActual(Subscriber s) { - source.subscribe(new BackpressureBufferSubscriber<>(s, bufferSize, unbounded, delayError, onOverflow)); + source.subscribe(new BackpressureBufferSubscriber<>(s, bufferSize, unbounded, delayError, onOverflow, onDropped)); } static final class BackpressureBufferSubscriber extends BasicIntQueueSubscription implements FlowableSubscriber { @@ -53,6 +55,7 @@ static final class BackpressureBufferSubscriber extends BasicIntQueueSubscrip final SimplePlainQueue queue; final boolean delayError; final Action onOverflow; + final Consumer onDropped; Subscription upstream; @@ -66,10 +69,11 @@ static final class BackpressureBufferSubscriber extends BasicIntQueueSubscrip boolean outputFused; BackpressureBufferSubscriber(Subscriber actual, int bufferSize, - boolean unbounded, boolean delayError, Action onOverflow) { + boolean unbounded, boolean delayError, Action onOverflow, Consumer onDropped) { this.downstream = actual; this.onOverflow = onOverflow; this.delayError = delayError; + this.onDropped = onDropped; SimplePlainQueue q; @@ -98,6 +102,7 @@ public void onNext(T t) { MissingBackpressureException ex = new MissingBackpressureException("Buffer is full"); try { onOverflow.run(); + onDropped.accept(t); } catch (Throwable e) { Exceptions.throwIfFatal(e); ex.initCause(e); diff --git a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategy.java b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategy.java index 29a207fba5..7963fb7d40 100644 --- a/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategy.java +++ b/src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategy.java @@ -20,7 +20,7 @@ import io.reactivex.rxjava3.core.*; import io.reactivex.rxjava3.exceptions.*; -import io.reactivex.rxjava3.functions.Action; +import io.reactivex.rxjava3.functions.*; import io.reactivex.rxjava3.internal.subscriptions.SubscriptionHelper; import io.reactivex.rxjava3.internal.util.BackpressureHelper; import io.reactivex.rxjava3.plugins.RxJavaPlugins; @@ -38,17 +38,21 @@ public final class FlowableOnBackpressureBufferStrategy extends AbstractFlowa final BackpressureOverflowStrategy strategy; + final Consumer onDropped; + public FlowableOnBackpressureBufferStrategy(Flowable source, - long bufferSize, Action onOverflow, BackpressureOverflowStrategy strategy) { + long bufferSize, Action onOverflow, BackpressureOverflowStrategy strategy, + Consumer onDropped) { super(source); this.bufferSize = bufferSize; this.onOverflow = onOverflow; this.strategy = strategy; + this.onDropped = onDropped; } @Override protected void subscribeActual(Subscriber s) { - source.subscribe(new OnBackpressureBufferStrategySubscriber<>(s, onOverflow, strategy, bufferSize)); + source.subscribe(new OnBackpressureBufferStrategySubscriber<>(s, onOverflow, strategy, bufferSize, onDropped)); } static final class OnBackpressureBufferStrategySubscriber @@ -61,6 +65,8 @@ static final class OnBackpressureBufferStrategySubscriber final Action onOverflow; + final Consumer onDropped; + final BackpressureOverflowStrategy strategy; final long bufferSize; @@ -77,13 +83,15 @@ static final class OnBackpressureBufferStrategySubscriber Throwable error; OnBackpressureBufferStrategySubscriber(Subscriber actual, Action onOverflow, - BackpressureOverflowStrategy strategy, long bufferSize) { + BackpressureOverflowStrategy strategy, long bufferSize, + Consumer onDropped) { this.downstream = actual; this.onOverflow = onOverflow; this.strategy = strategy; this.bufferSize = bufferSize; this.requested = new AtomicLong(); this.deque = new ArrayDeque<>(); + this.onDropped = onDropped; } @Override @@ -104,44 +112,60 @@ public void onNext(T t) { } boolean callOnOverflow = false; boolean callError = false; + boolean callDrain = false; Deque dq = deque; + T toDrop = null; synchronized (dq) { if (dq.size() == bufferSize) { switch (strategy) { case DROP_LATEST: - dq.pollLast(); + toDrop = dq.pollLast(); dq.offer(t); callOnOverflow = true; break; case DROP_OLDEST: - dq.poll(); + toDrop = dq.poll(); dq.offer(t); callOnOverflow = true; break; default: // signal error + toDrop = t; callError = true; break; } } else { dq.offer(t); + callDrain = true; } } - if (callOnOverflow) { - if (onOverflow != null) { - try { - onOverflow.run(); - } catch (Throwable ex) { - Exceptions.throwIfFatal(ex); - upstream.cancel(); - onError(ex); - } + if (callOnOverflow && onOverflow != null) { + try { + onOverflow.run(); + } catch (Throwable ex) { + Exceptions.throwIfFatal(ex); + upstream.cancel(); + onError(ex); + } + } + + if (onDropped != null && toDrop != null) { + try { + onDropped.accept(toDrop); + } catch (Throwable ex) { + Exceptions.throwIfFatal(ex); + upstream.cancel(); + onError(ex); } - } else if (callError) { + } + + if (callError) { upstream.cancel(); onError(MissingBackpressureException.createDefault()); - } else { + } + + if (callDrain) { drain(); } } diff --git a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategyTest.java b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategyTest.java index 4fc8ba3c25..217162c206 100644 --- a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategyTest.java +++ b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferStrategyTest.java @@ -15,7 +15,9 @@ import static io.reactivex.rxjava3.core.BackpressureOverflowStrategy.*; import static io.reactivex.rxjava3.internal.functions.Functions.EMPTY_ACTION; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -28,8 +30,9 @@ import io.reactivex.rxjava3.functions.*; import io.reactivex.rxjava3.internal.functions.Functions; import io.reactivex.rxjava3.internal.subscriptions.BooleanSubscription; +import io.reactivex.rxjava3.processors.PublishProcessor; import io.reactivex.rxjava3.subscribers.*; -import io.reactivex.rxjava3.testsupport.TestHelper; +import io.reactivex.rxjava3.testsupport.*; public class FlowableOnBackpressureBufferStrategyTest extends RxJavaTest { @@ -225,4 +228,98 @@ public void cancelOnDrain() { .requestMore(10) .assertResult(1); } + + @Test + public void onDroppedNormalDropOldest() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + @SuppressWarnings("unchecked") + Consumer onDropped = mock(Consumer.class); + + TestSubscriber ts = pp.onBackpressureBuffer(1, null, BackpressureOverflowStrategy.DROP_OLDEST, onDropped) + .test(0L); + + ts.assertEmpty(); + + pp.onNext(1); + + ts.assertEmpty(); + verify(onDropped, never()).accept(any()); + + pp.onNext(2); + + ts.assertEmpty(); + + verify(onDropped).accept(1); + } + + @Test + public void onDroppedNormalDropLatest() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + @SuppressWarnings("unchecked") + Consumer onDropped = mock(Consumer.class); + + TestSubscriber ts = pp.onBackpressureBuffer(2, null, BackpressureOverflowStrategy.DROP_LATEST, onDropped) + .test(0L); + + ts.assertEmpty(); + + pp.onNext(1); + + pp.onNext(2); + + ts.assertEmpty(); + verify(onDropped, never()).accept(any()); + + pp.onNext(3); + + ts.assertEmpty(); + + verify(onDropped).accept(2); + } + + @Test + public void onDroppedNormalError() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + @SuppressWarnings("unchecked") + Consumer onDropped = mock(Consumer.class); + + TestSubscriber ts = pp.onBackpressureBuffer(1, null, BackpressureOverflowStrategy.ERROR, onDropped) + .test(0L); + + ts.assertEmpty(); + + pp.onNext(1); + + ts.assertEmpty(); + verify(onDropped, never()).accept(any()); + + pp.onNext(2); + + ts.assertFailure(MissingBackpressureException.class); + + verify(onDropped).accept(2); + } + + @Test + public void onDroppedCrash() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + Consumer onDropped = v -> { throw new TestException(); }; + + TestSubscriberEx ts = pp.onBackpressureBuffer(1, null, BackpressureOverflowStrategy.DROP_OLDEST, onDropped) + .subscribeWith(new TestSubscriberEx(0L)); + + ts.assertEmpty(); + + pp.onNext(1); + + ts.assertEmpty(); + + pp.onNext(2); + + ts.assertFailure(TestException.class); + } } diff --git a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferTest.java b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferTest.java index 5a02218423..657ce36f1b 100644 --- a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferTest.java +++ b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableOnBackpressureBufferTest.java @@ -14,6 +14,8 @@ package io.reactivex.rxjava3.internal.operators.flowable; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; import java.util.List; import java.util.concurrent.*; @@ -350,4 +352,50 @@ public void doubleOnSubscribe() { public void badRequest() { TestHelper.assertBadRequestReported(Flowable.never().onBackpressureBuffer()); } + + @Test + public void onDroppedNormal() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + @SuppressWarnings("unchecked") + Consumer onDropped = mock(Consumer.class); + + TestSubscriber ts = pp.onBackpressureBuffer(1, false, false, () -> { }, onDropped) + .test(0L); + + ts.assertEmpty(); + + pp.onNext(1); + + ts.assertEmpty(); + verify(onDropped, never()).accept(any()); + + pp.onNext(2); + + ts.assertFailure(MissingBackpressureException.class); + + verify(onDropped).accept(2); + } + + @Test + public void onDroppedCrash() throws Throwable { + PublishProcessor pp = PublishProcessor.create(); + + Consumer onDropped = v -> { throw new TestException(); }; + + TestSubscriberEx ts = pp.onBackpressureBuffer(1, false, false, () -> { }, onDropped) + .subscribeWith(new TestSubscriberEx(0L)); + + ts.assertEmpty(); + + pp.onNext(1); + + ts.assertEmpty(); + + pp.onNext(2); + + ts.assertFailure(MissingBackpressureException.class); + + assertTrue(ts.errors().get(0).getCause() instanceof TestException); + } } diff --git a/src/test/java/io/reactivex/rxjava3/validators/ParamValidationCheckerTest.java b/src/test/java/io/reactivex/rxjava3/validators/ParamValidationCheckerTest.java index 8dd240119b..c2ca87d4d2 100644 --- a/src/test/java/io/reactivex/rxjava3/validators/ParamValidationCheckerTest.java +++ b/src/test/java/io/reactivex/rxjava3/validators/ParamValidationCheckerTest.java @@ -153,6 +153,7 @@ public void checkParallelFlowable() { // null Action allowed addOverride(new ParamOverride(Flowable.class, 1, ParamMode.ANY, "onBackpressureBuffer", Long.TYPE, Action.class, BackpressureOverflowStrategy.class)); + addOverride(new ParamOverride(Flowable.class, 1, ParamMode.ANY, "onBackpressureBuffer", Long.TYPE, Action.class, BackpressureOverflowStrategy.class, Consumer.class)); // zero repeat is allowed addOverride(new ParamOverride(Flowable.class, 0, ParamMode.NON_NEGATIVE, "repeat", Long.TYPE)); From 408f6d8c629a63eb5db12cb2191fbcf284c5df75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 May 2023 11:49:42 +0200 Subject: [PATCH 13/30] Bump com.google.guava:guava from 31.1-jre to 32.0.0-jre (#7568) Bumps [com.google.guava:guava](https://github.com/google/guava) from 31.1-jre to 32.0.0-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ad48b5a6e2..a1553ed22d 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { testNgVersion = "7.5" mockitoVersion = "4.11.0" jmhLibVersion = "1.21" - guavaVersion = "31.1-jre" + guavaVersion = "32.0.0-jre" } def releaseTag = System.getenv("BUILD_TAG") From e7eedba9192a6a60e42dda0bc78ecc1f72a15211 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Jun 2023 08:17:30 +0200 Subject: [PATCH 14/30] Bump com.google.guava:guava from 32.0.0-jre to 32.0.1-jre (#7570) Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.0.0-jre to 32.0.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a1553ed22d..ca31799156 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { testNgVersion = "7.5" mockitoVersion = "4.11.0" jmhLibVersion = "1.21" - guavaVersion = "32.0.0-jre" + guavaVersion = "32.0.1-jre" } def releaseTag = System.getenv("BUILD_TAG") From b5ad3d93a16874a80555812450ed965e7fe9f5a2 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Fri, 9 Jun 2023 12:59:05 +0200 Subject: [PATCH 15/30] Update README.md Link to JDK 9 and JDK 21 interop libraries --- README.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3d86f2fe93..85b49a6b22 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,19 @@ It extends the [observer pattern](http://en.wikipedia.org/wiki/Observer_pattern) #### Version 3.x ([Javadoc](http://reactivex.io/RxJava/3.x/javadoc/)) -- single dependency: [Reactive-Streams](https://github.com/reactive-streams/reactive-streams-jvm) -- Java 8+ or Android API 21+ required -- Java 8 lambda-friendly API -- [Android](https://github.com/ReactiveX/RxAndroid) desugar friendly -- fixed API mistakes and many limits of RxJava 2 -- intended to be a replacement for RxJava 2 with relatively few binary incompatible changes -- non-opinionated about the source of concurrency (threads, pools, event loops, fibers, actors, etc.) -- async or synchronous execution -- virtual time and schedulers for parameterized concurrency -- test and diagnostic support via test schedulers, test consumers and plugin hooks +- Single dependency: [Reactive-Streams](https://github.com/reactive-streams/reactive-streams-jvm). +- Java 8+ or Android API 21+ required. +- Java 8 lambda-friendly API. +- [Android](https://github.com/ReactiveX/RxAndroid) desugar friendly. +- Fixed API mistakes and many limits of RxJava 2. +- Intended to be a replacement for RxJava 2 with relatively few binary incompatible changes. +- Non-opinionated about the source of concurrency (threads, pools, event loops, fibers, actors, etc.). +- Async or synchronous execution. +- Virtual time and schedulers for parameterized concurrency. +- Test and diagnostic support via test schedulers, test consumers and plugin hooks. +- Interop with newer JDK versions via 3rd party libraries, such as + - [Java 9 Flow API](https://github.com/akarnokd/RxJavaJdk9Interop) + - [Java 21 Virtual Threads](https://github.com/akarnokd/RxJavaFiberInterop#rxjavafiberinterop) Learn more about RxJava in general on the Wiki Home. From 806ec1ca7d5ea50026f9019fc5b49ac70f7b1678 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Fri, 9 Jun 2023 13:00:11 +0200 Subject: [PATCH 16/30] Update README.md Fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85b49a6b22..fe21176c1f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ It extends the [observer pattern](http://en.wikipedia.org/wiki/Observer_pattern) - Virtual time and schedulers for parameterized concurrency. - Test and diagnostic support via test schedulers, test consumers and plugin hooks. - Interop with newer JDK versions via 3rd party libraries, such as - - [Java 9 Flow API](https://github.com/akarnokd/RxJavaJdk9Interop) + - [Java 9 Flow API](https://github.com/akarnokd/RxJavaJdk9Interop#rxjavajdk9interop) - [Java 21 Virtual Threads](https://github.com/akarnokd/RxJavaFiberInterop#rxjavafiberinterop) Learn more about RxJava in general on the Wiki Home. From da341886591352773838615b28c8f46c27dc5adc Mon Sep 17 00:00:00 2001 From: chintando Date: Fri, 23 Jun 2023 11:18:30 -0700 Subject: [PATCH 17/30] Convert CompletableOnErrorComplete$onError inner class to static (#7575) * pass predicate to avoid holding reference * static * fix compile error --------- Co-authored-by: Chintan Doshi --- .../completable/CompletableOnErrorComplete.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/internal/operators/completable/CompletableOnErrorComplete.java b/src/main/java/io/reactivex/rxjava3/internal/operators/completable/CompletableOnErrorComplete.java index bebb401e48..c4252e7f3b 100644 --- a/src/main/java/io/reactivex/rxjava3/internal/operators/completable/CompletableOnErrorComplete.java +++ b/src/main/java/io/reactivex/rxjava3/internal/operators/completable/CompletableOnErrorComplete.java @@ -32,15 +32,18 @@ public CompletableOnErrorComplete(CompletableSource source, Predicate predicate; - OnError(CompletableObserver observer) { + OnError(CompletableObserver observer, + Predicate predicate) { this.downstream = observer; + this.predicate = predicate; } @Override From b903147adc2778a57be9103d4823bb401e6d06d9 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Fri, 30 Jun 2023 20:58:50 +0200 Subject: [PATCH 18/30] Update to Gradle 7.6.2 (#7579) --- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 61624 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 6679 zcmZXZbx<4Jv-cr5MOqw+YY9b)ySuwfaYAtdlp?{QxE2T&+^tY3#S6tH5TsZs8YH;4 z$bIhf{^ot>y?1AJ=KI;*GiPS^pEGA;HZZjZQpoTw3(anvxqTq3EzLbC2raWn0~$cjd6YdO8R)jHz@`iMmu5Mwl_}E?kV*#a2|=>1J`q+vOZUk=@^Agl8I3Bm%Eto z<-h)0Z0auLA7zP@Kv%2tG2H2A&+hql6O~(bJWOCMmM+xDe&@m1WxR<~$iNPfkC8lG zc&~4h9jr5wgH!&kN}Aj!tv~V3z8GBFB^Sywomq4$b&Mrh7nr5^$JV|1*7F5=Om(-A zs))YY`>TDaU#K*Ro#B@owW6hwUiAF=waT{NANYEXH1xEX1DnQf?rC)HUpb82ongqV zCS7j{YB&@%Dsr2V2Lwk8NWW5sm~7;TrnGBLz()A4NNzoz$I%dbjGEUneRtUDta0&A zTiw?`0bX3lWiBgfAu&;TGFsp_|a(91pbb_ zXRwoCLf|ZGv#(7{bl;nhQ`Mq#V_qEK^jEA-Fun$li7eA7n|b?s;OCYI&-CVZE`=jU%+Zr7HaXJD&{9G-a$2NAjx52K+~fYS2{^0#M)B)P5JKmHQCl&xSeJAZnh2E# zMm5Mmqrv`FMlr&`;mH+9CFA#KR-npX`A_dxMTj4SF*XM!1W(MWc%M~3lNQvz1-1&X z`4vV!XvQ*iX&rh2X(P32mxLH84O)?2=#)Vz?Xb#kYDip#SgOB-%b&7F?~_rVb`6vH z?rHxNP3brkms{(=i7YEj5Q@b=ks&16szm8r7XF2AT_`^At&?&>90if!x2@hkntkZD zS8{ynporC*(h{>OdOQqJ&8((9t54u6y(;TMAV$7cd=r$M2UDVM*&@xu;lcX9Q2<505a>t)HK2(7$xGq zMust$Fz0c>WP6`FJe~N}tU-q-?=t@W>Kr$FLazFH(uX`v1;x2Y_mY-bN$NrEKC&(7x`HTEk}_-q~Q=ku<)4a@vd7A|D1qY!W!z8s`Hz)T#R!>po3M_76A_ z*+)zEi*ca_TrbB|4frtUiz+kkM0()OYn<~ zU#Y4~%CC(V9oq`(rAaG{CqhW@>(r|KrblS!2$Sj%c%eaaq$#kJJkA@>Oy{EF(Pf~wG@xYH5s@b(7L5fGguO=+M-7- zvfV^-hlG_$oeac(xtiw@5X9r8yDPgT*edNvAojm>mYl8%noK1(GKDlv@)NFDl4~t# zj#~=-JdoUgC%ZT=^P^n&^$d1JrJ#^Hio7_k<@4d(v1BNjpes%g*E00e$)s^2C{aP$ zc6mNeMEI?`_haTRkNsoGkI8*e#BEMh576_U&X#m~zZXG#XE6`ljWhaPhle!Ml5cPa`)#ez+6;uL>GjW^ z^ihQ4HB1J7-Tze#mN(`oI97JdO~XR3v;6}d9M7d8-XF^OvQ?4}5V=Xa7^4`ljLm_F z(`fy2{rzu@J0E#O7YjNf^M!uBVR~F?o_pyL%1^odd+t!S%e`aLwaYzug_?vW*YZrB zXMfTtYpUNeU%d+OC_bA&+ZnQpWRK$$V<4!VFw7%A@()J2rUspYEjQEwEXCb5*IFgtkZyDA4 z!a$c(lMP{4W=Ta`^QWYu#0Lx`K46VOF+j3uG!YM6}Ju?CSPSP?%sJ3?^`o&G8#TmsTTV;(vc zN3_=Dhx2M&9zWZlzmu5m!nFgqNCFGrh?uIWjdLMpauo0+fLc^ya>^4-8%@%bUxdV- zYRL)lnp$Vq_&z*lLS~3k57N)Rrpey#=VZ3>>s6kW^MM4v2toUVv8|-a9amt+{PPaD zr}!(AIh^|oKF!4JuGOu}){JaD0Cy|hVSaQJ-pbl}6pq*8p5s^10#OnCq?CZ9mSE!B zi75B0-Fz59V)^`t-4%a{|62zlj`DpkWgaWlRfqlh>BDSR2&Z8w;PYr8_>gq}Ywq|t zJzKF!oPB@CQk_^}8Ds9H_v}f%+5=M;_m`Gkh7?7iWCKLx$F~-T8CrbM`KhY(|uT{yhr&jPN-?#_nU8_W#>?;+}m&JnrybjT>oQB_t zUm-#Zcs9BEZgXm^&A{c_l(UrJKay6kvqf-EeB%P-j;6Ic~k8dbh9W#M@r*-N0Ieg@e4yXPto2v+-V-QNuqX+Nkh@J z)&WS>dv_Kn?#qwXnk`LI9BepKc#F>02TcV80dF~Q^Q3+**mrLPb_90&>XsAWxA$DV z1|N165$^?a{Nt4CLzgoH_-PvjfCLB8$6htq#aeL65RP9@_KCfDkVDcBzZf<}-*2&2 z#^L8Fx1j|dFwgyav?o&}j;;RjGP9#WD@4oj%NrddF(XN{igRS%?4A=tZrZj3Ux`)w_cPhg$m}x6{Pf?IX^=IfySb zFylD#+woa&#CGC5+woGFjgMk`>Vln}fFHX>l{G4MS#{sI-j_^4erF3p9!sZqFN(mA z0#8^25(R(sktVl|;=N;y#btinrQi=4Hj8(J-rITi?RC*AbK2rhRz5c};75+$vWwoq zHAIYr{X?pqmwKr96a$IOy~XPJC+!nB1RR>@37{eF#p9cl9{Yg16X0(eL36cxZ!a_F z9MWj{=>mwDBNkOfZm~gn>n2KDtH;%k!O3a%F~&kwS1N;}&trFt+BHen)b;(+Q_s6w zi{%PEuzfqNpzWT26Spq>l>{DvKS8J%{;*H$cnx@yW7@@XN9u7t&hoPtt^1>@h*$NmGKXb9+twu9Z99q^?duQe6l zYm9H3yWYdysvGoFmPUml+tq%Q6E;wtZ&}WR0yy2C=`|8LLcZ{opm{?UJSOSv^Le=b}WY!&K+}f#`|3&B|U*3c)LJ(HzOnsj2ipFcZ9=S4^q0l2+;2Cktk%Tk%*M3YHDdGJEutVteMc7AVgtKZH-p z{&2EpFUrq`#rzu5_UT zssc5|rIX?nNCd)yCBSAWLao3l1*qF%;$J*qZ8Acx`PtV+Ybl{d{Mey~Fju}1w4m2q zH>&UB@3LgNt?ljWdz@kxh#>^b6Jifwu78>S^jY#8`Sl#vff$rNbIv~JM{O*?JgE5D zc; zI*;)^K5xIrRUZXpMB9JL;?EzUP}$=wRZyyFS!Iw}>F^;Y-1HqZGWYBG5wrS}j^}x> zM6+5h7;sd=&wQ>IC#_b*T%og78|H72w)*yWw`zmH+{Fbr{DZZsO`k7d*IJRX^ntlY z8VlcA65{;n#=!Ot4a*{4IjJ)CuiCmw={VPQnz409%KeVfUzZ8%9~&AjDJ(L}fu?3! zq#$VrQ&|BQrUJ!;J(9#s3BmpGOLFEbcK+rMq}BLyc_TY=Cno#)mvMrBIaO&2xqyFM zP~w7H(6JNPoA=ZVXE9wNhGb`>_VR-%k26e9Xb>$oPU1U-p0W6vP~dT?+Rf~?MeJw? znK%!|4$a87{EFF8Fmpl4w&j-B_-IE2Pw6;Q+C*mQoB?fzw-Z}AP$P6oxu z#r>B#e#}~>ho`%hht10gS?hx|w8wNIxBiz{d_I9QnGa;!}WLXHZCCS zJNE-veh_Jf;=PXTx>=R=9Yz$Vw*Tz?-Sq&rQ+x&r0jJ-5pdmj`%3DzpXpae=HTrxN zEOR1uS=N;2#}!5UY%3ptu2XD&b@{5r9a3!9Dgj&2p4h_zPemsL%$!|%L$!)v>f*$Q z{sTEh{WWWbDM%X8HoS&4{Pwo*&1+#6yl6Kd*(3Q&tCB}jzrHdh!Gs3N|8HT1O zcM)0>ikq=Zl*fv3;bFud$Lj>qV_McIzHx-#`ru=H+6i+Yw8E%wEWZld%thN^Q@3HW zopPeXuc-S))Ypau^I>08!)RKnZo0Rkx|&_1TFi2EMA0XHJQ_+zTH(I~pMDJhvDc|E z--P6fhL9x=O8FTP>$?X!%1oxbuVv+&D+HY&17GXwu z0-G;kY}`yXGTc&MMPkKO5T0@+FF|CwZ(h)oYfePSQ2y@7^r+05s}!_Czt#vZW2nXy zj{gLIc%M;bkd5d`rq}(b_ls5a+1yHs5#M@+KF1R!=Ed3rqg3Y1>GML8j(0dN)OOs= zqgA^=^W@=kc9(9Ly5)Pwv>gX#LWl?)k0kV>04{L{oaItjMmN`!)gFGumF0 zkj=0F#!JuXd^!9I3NvoIJ*oIcp)&(~-(5v79eZdZa)YSWzP64;B~2i_$m{80U$`;A z<_WGHr30_G zUz6C2L#P%)F|UIN{_bq$oUt z${m?S9eBPdnMOC^MT7TZ7}^-pA7NXz&(i7!sYhGl?MXohJ*)%^Lb1KD`#>x%PXL#X zaL}a&{3iT!Q79piHGKZ;IuY>qL5yIvF@pLB-|Tt|KI(^RQtxDVcOf8L;rGjtKU6Y) zH1%_PVo3|Gsw|g0ld?r<{dqDU9cG<0m&C;hK2Iyqaj+D|@P4euQyL0&?M_<$Q`OyE zGJ+~i&hv#xcK#sC5_r9cwIPxRY z@$AF%oV5(*t!Ve@H;&1Lz_Q=|V$OW^nK-bifffkqs#9zn&FzYLEYsxKrPC_BsZuSK zxws6FEt7rh%B)5|9te1Dz(Wt?S$Zhd`Z+#LvP}hkHm@g6E^Rk48DBlAR1& zvGpJ?!`cW32`LioA%!S48m{&w>i)su#z4FztM-qrit1ry0m)0LAQvzz?3a9aWDt=R zUUD}?Uzu!7qw2ZZ;~ z!vFhP?(Pg)Q`%OX98A|R)5nc{bFZ~=znKr2;jQR(Zfi~0XTV2Bzmk4bdy2^WY&LCn z=UGR#IG2t+^TLLv`-+}>{uPlW1K{FbH&xDAv9ujeNPd0A@Rk9nt0eD{@RPv*pI0Zp z#o*!$2Ol@}i4y0cA^M8;J2O;w%#fjRHQ;zvD%Ki<%9-)(lEA~ahJDBG{DO>Tnh6RS zLgm`Cba&bMy!rqlG=Wr_2_(`?=fpB?Hf2TeQ6_gzxsJrKl z{(+&;*RGbn*5L*|#?|DGgRSA%Yp2(sh$~?L--v_RCU_+_^j}r63}O8o_(d@4D(N`E zfwx!yJJ$5VwQEj!;7NE;X*b1K&4>I*)5Jcng-(Qg$?&=tv${{_ff?YAe1o6;3Qhzo zqaPD73-|p7ETSbQY{fY@a6PgiW+7Two2?jZY8!S0Lp^xrFHty^Vx_k!u zp$9r5!|Tu%Fbw&pfG*?okPm$;g9&B*PdE(q7JWHm17!{`m{oj~=stC|S{2zsrVRuS{&qs=e=Ck(S7ycKd Cn(^uY delta 6711 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 N0Rn>h&;K*$e*kC({~`bY diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f398c33c4b..4e86b92707 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 8244748ce57b1318b9b11b9e09331747264ce740 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 10:07:41 +0200 Subject: [PATCH 19/30] Bump com.google.guava:guava from 32.0.1-jre to 32.1.1-jre (#7580) Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.0.1-jre to 32.1.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ca31799156..43d35a008d 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { testNgVersion = "7.5" mockitoVersion = "4.11.0" jmhLibVersion = "1.21" - guavaVersion = "32.0.1-jre" + guavaVersion = "32.1.1-jre" } def releaseTag = System.getenv("BUILD_TAG") From 216f509083efdd01b4a36108df3a3a7ac45f0d0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 09:11:49 +0200 Subject: [PATCH 20/30] Bump ru.vyarus.animalsniffer from 1.7.0 to 1.7.1 (#7582) Bumps ru.vyarus.animalsniffer from 1.7.0 to 1.7.1. --- updated-dependencies: - dependency-name: ru.vyarus.animalsniffer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 43d35a008d..350e386523 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id("eclipse") id("jacoco") id("maven-publish") - id("ru.vyarus.animalsniffer") version "1.7.0" + id("ru.vyarus.animalsniffer") version "1.7.1" id("me.champeau.gradle.jmh") version "0.5.3" id("com.github.hierynomus.license") version "0.16.1" id("biz.aQute.bnd.builder") version "6.4.0" From 49357c4e4c042a59014d5ae17929e239854d105a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jul 2023 08:50:57 +0200 Subject: [PATCH 21/30] Bump gradle/wrapper-validation-action from 1.0.6 to 1.1.0 (#7586) Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 1.0.6 to 1.1.0. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/v1.0.6...v1.1.0) --- updated-dependencies: - dependency-name: gradle/wrapper-validation-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 64eb5bdee0..279654d26d 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1.0.6 + - uses: gradle/wrapper-validation-action@v1.1.0 From 9975460e46116d1cac36e4a8b7ff9bb34df7c24a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 07:54:50 +0200 Subject: [PATCH 22/30] Bump com.google.guava:guava from 32.1.1-jre to 32.1.2-jre (#7589) Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.1-jre to 32.1.2-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 350e386523..dbc4b89050 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ ext { testNgVersion = "7.5" mockitoVersion = "4.11.0" jmhLibVersion = "1.21" - guavaVersion = "32.1.1-jre" + guavaVersion = "32.1.2-jre" } def releaseTag = System.getenv("BUILD_TAG") From 9ebf2218f1f79ab84a347e288155e7dae12cf416 Mon Sep 17 00:00:00 2001 From: Chris Povirk Date: Wed, 23 Aug 2023 06:42:32 -0400 Subject: [PATCH 23/30] Remove `@NonNull` annotation from `Collector` container type parameter. (#7590) `collect` delegates to `FlowableCollectWithCollectorSingle`, which does is not annotated to require a non-nullable type for its corresponding type parameter and whose implementation works fine with a null container. This PR lets Kotlin code pass a `Collector`, where `A` is declared as ``. --- src/main/java/io/reactivex/rxjava3/core/Flowable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/reactivex/rxjava3/core/Flowable.java b/src/main/java/io/reactivex/rxjava3/core/Flowable.java index 4d277ab08b..8bb6156659 100644 --- a/src/main/java/io/reactivex/rxjava3/core/Flowable.java +++ b/src/main/java/io/reactivex/rxjava3/core/Flowable.java @@ -20394,7 +20394,7 @@ public final TestSubscriber test(long initialRequest, boolean cancel) { // No @BackpressureSupport(BackpressureKind.UNBOUNDED_IN) @SchedulerSupport(SchedulerSupport.NONE) @NonNull - public final <@NonNull R, @NonNull A> Single collect(@NonNull Collector collector) { + public final <@NonNull R, @Nullable A> Single collect(@NonNull Collector collector) { Objects.requireNonNull(collector, "collector is null"); return RxJavaPlugins.onAssembly(new FlowableCollectWithCollectorSingle<>(this, collector)); } From a57ad01c044bc64c7aba87eea2960965405fa0bb Mon Sep 17 00:00:00 2001 From: akarnokd Date: Wed, 23 Aug 2023 12:47:36 +0200 Subject: [PATCH 24/30] Allow nullable acc. type on Observable.collect too (supplement #7590) --- src/main/java/io/reactivex/rxjava3/core/Observable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/reactivex/rxjava3/core/Observable.java b/src/main/java/io/reactivex/rxjava3/core/Observable.java index 792b740104..ac5bf8f0ae 100644 --- a/src/main/java/io/reactivex/rxjava3/core/Observable.java +++ b/src/main/java/io/reactivex/rxjava3/core/Observable.java @@ -16985,7 +16985,7 @@ public final TestObserver test(boolean dispose) { // NoPMD @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) @NonNull - public final <@NonNull R, @NonNull A> Single collect(@NonNull Collector collector) { + public final <@NonNull R, @Nullable A> Single collect(@NonNull Collector collector) { Objects.requireNonNull(collector, "collector is null"); return RxJavaPlugins.onAssembly(new ObservableCollectWithCollectorSingle<>(this, collector)); } From 13a8d83656940dce0c18e8e0a2a17ac157dd1ddb Mon Sep 17 00:00:00 2001 From: Pedro Nacht Date: Thu, 24 Aug 2023 16:16:05 -0300 Subject: [PATCH 25/30] Hash-pin GitHub Actions (#7594) Signed-off-by: Pedro Kaj Kjellerup Nacht --- .github/workflows/gradle-wrapper-validation.yml | 4 ++-- .github/workflows/gradle_branch.yml | 8 ++++---- .github/workflows/gradle_jdk11.yml | 6 +++--- .github/workflows/gradle_pr.yml | 8 ++++---- .github/workflows/gradle_release.yml | 8 ++++---- .github/workflows/gradle_snapshot.yml | 8 ++++---- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 279654d26d..97f3457985 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -9,5 +9,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1.1.0 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 # v1.1.0 diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index a28d422afe..3e1c86b3a6 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -15,14 +15,14 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Set up JDK 8 - uses: actions/setup-java@v3 + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.3.1 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} @@ -32,6 +32,6 @@ jobs: - name: Build RxJava run: ./gradlew build --stacktrace - name: Upload to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 - name: Generate Javadoc run: ./gradlew javadoc --stacktrace diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index b02da5c18c..4d6a783321 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -17,14 +17,14 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: 'zulu' java-version: '11' - name: Cache Gradle packages - uses: actions/cache@v3.3.1 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index 71b63a227b..a338441114 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -15,14 +15,14 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Set up JDK 8 - uses: actions/setup-java@v3 + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.3.1 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} @@ -32,6 +32,6 @@ jobs: - name: Build RxJava run: ./gradlew build --stacktrace - name: Upload to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 - name: Generate Javadoc run: ./gradlew javadoc --stacktrace diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index 067050c4fa..39b1c67c4b 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -22,14 +22,14 @@ jobs: env: CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Set up JDK 8 - uses: actions/setup-java@v3 + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.3.1 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} @@ -43,7 +43,7 @@ jobs: - name: Build RxJava run: ./gradlew build --stacktrace --no-daemon - name: Upload to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 - name: Upload release run: ./gradlew -PreleaseMode=full publish --no-daemon --no-parallel --stacktrace env: diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index b6a481ab16..a65399815c 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -21,14 +21,14 @@ jobs: # ------------------------------------------------------------------------------ CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Set up JDK 8 - uses: actions/setup-java@v3 + uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@v3.3.1 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} @@ -47,7 +47,7 @@ jobs: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_USER }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_PASSWORD }} - name: Upload to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 - name: Push Javadoc run: ./push_javadoc.sh # Define secrets at https://github.com/ReactiveX/RxJava/settings/secrets/actions From 542374c80d0df9886384433bd0a25b1358136eda Mon Sep 17 00:00:00 2001 From: David Karnok Date: Wed, 30 Aug 2023 00:16:58 +0200 Subject: [PATCH 26/30] 3.x: Fix ObservableSwitchMap NPE due to cancel race (#7597) --- .../operators/observable/ObservableSwitchMap.java | 5 +++-- .../operators/flowable/FlowableSwitchTest.java | 15 +++++++++++++++ .../observable/ObservableSwitchTest.java | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap.java b/src/main/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap.java index e213352a05..3e0558aacf 100644 --- a/src/main/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap.java +++ b/src/main/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap.java @@ -349,9 +349,10 @@ public void onSubscribe(Disposable d) { @Override public void onNext(R t) { - if (index == parent.unique) { + SimpleQueue q = queue; + if (index == parent.unique && q != null) { if (t != null) { - queue.offer(t); + q.offer(t); } parent.drain(); } diff --git a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchTest.java b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchTest.java index 2bb5a05808..9f200e3c56 100644 --- a/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchTest.java +++ b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchTest.java @@ -1377,4 +1377,19 @@ Flowable createFlowable(AtomicInteger inner) { inner.incrementAndGet(); }); } + + @Test + public void innerOnSubscribeOuterCancelRace() { + TestSubscriber ts = new TestSubscriber(); + + Flowable.just(1) + .hide() + .switchMap(v -> Flowable.just(1) + .doOnSubscribe(d -> ts.cancel()) + .scan(1, (a, b) -> a) + ) + .subscribe(ts); + + ts.assertEmpty(); + } } diff --git a/src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchTest.java b/src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchTest.java index ffa4049a44..72e6c93bb8 100644 --- a/src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchTest.java +++ b/src/test/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSwitchTest.java @@ -1438,4 +1438,19 @@ Observable createObservable(AtomicInteger inner) { inner.incrementAndGet(); }); } + + @Test + public void innerOnSubscribeOuterCancelRace() { + TestObserver to = new TestObserver(); + + Observable.just(1) + .hide() + .switchMap(v -> Observable.just(1) + .doOnSubscribe(d -> to.dispose()) + .scan(1, (a, b) -> a) + ) + .subscribe(to); + + to.assertEmpty(); + } } From f4bb3bd34e2be7be3eacedd942c17835142f1c62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Sep 2023 09:33:27 +0200 Subject: [PATCH 27/30] Bump actions/checkout from 3.6.0 to 4.0.0 (#7598) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.6.0 to 4.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/f43a0e5ff2bd294095638e18286ca9a3d1956744...3df4ab11eba7bda6032a0b82a6bb43b11571feac) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper-validation.yml | 2 +- .github/workflows/gradle_branch.yml | 2 +- .github/workflows/gradle_jdk11.yml | 2 +- .github/workflows/gradle_pr.yml | 2 +- .github/workflows/gradle_release.yml | 2 +- .github/workflows/gradle_snapshot.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 97f3457985..16890d4c6d 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -9,5 +9,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 # v1.1.0 diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index 3e1c86b3a6..171f258113 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index 4d6a783321..24b3f244d4 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 11 uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index a338441114..b4ed94e404 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index 39b1c67c4b..6c3f3378dd 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -22,7 +22,7 @@ jobs: env: CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index a65399815c..2bea780f54 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -21,7 +21,7 @@ jobs: # ------------------------------------------------------------------------------ CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: From dd1b5adf61539f698f66666f23adbe8866cbc7c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 08:51:54 +0200 Subject: [PATCH 28/30] Bump actions/cache from 3.3.1 to 3.3.2 (#7599) Bumps [actions/cache](https://github.com/actions/cache) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8...704facf57e6136b1bc63b828d79edcd491f0ee84) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle_branch.yml | 2 +- .github/workflows/gradle_jdk11.yml | 2 +- .github/workflows/gradle_pr.yml | 2 +- .github/workflows/gradle_release.yml | 2 +- .github/workflows/gradle_snapshot.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index 171f258113..dbdc6cd4de 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -22,7 +22,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index 24b3f244d4..fbb89562f9 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -24,7 +24,7 @@ jobs: distribution: 'zulu' java-version: '11' - name: Cache Gradle packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index b4ed94e404..3ad1f84ead 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -22,7 +22,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-1-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index 6c3f3378dd..cad0a03e83 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -29,7 +29,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index 2bea780f54..d79c559378 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -28,7 +28,7 @@ jobs: distribution: 'zulu' java-version: '8' - name: Cache Gradle packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ secrets.CACHE_VERSION }}-${{ hashFiles('**/*.gradle') }} From 8ad3095a58a1fc0afcecfb40b2260d24190cedca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 10:29:29 +0200 Subject: [PATCH 29/30] Bump actions/setup-java from 3.12.0 to 3.13.0 (#7600) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.12.0 to 3.13.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/cd89f46ac9d01407894225f350157564c9c7cee2...0ab4596768b603586c0de567f2430c30f5b0d2b0) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle_branch.yml | 2 +- .github/workflows/gradle_jdk11.yml | 2 +- .github/workflows/gradle_pr.yml | 2 +- .github/workflows/gradle_release.yml | 2 +- .github/workflows/gradle_snapshot.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index dbdc6cd4de..ec7bdf9dac 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: distribution: 'zulu' java-version: '8' diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index fbb89562f9..0c70a9f45d 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 11 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: distribution: 'zulu' java-version: '11' diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index 3ad1f84ead..49a6a7691e 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: distribution: 'zulu' java-version: '8' diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index cad0a03e83..ca2bce612f 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: distribution: 'zulu' java-version: '8' diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index d79c559378..90ce2fb7b1 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -23,7 +23,7 @@ jobs: steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set up JDK 8 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 + uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: distribution: 'zulu' java-version: '8' From e6f152df7e2f2061435ee8ac3f6ed82cf34e3c58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:00:08 +0200 Subject: [PATCH 30/30] Bump actions/checkout from 4.0.0 to 4.1.0 (#7601) Bumps [actions/checkout](https://github.com/actions/checkout) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/3df4ab11eba7bda6032a0b82a6bb43b11571feac...8ade135a41bc03ea155e62e844d188df1ea18608) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/gradle-wrapper-validation.yml | 2 +- .github/workflows/gradle_branch.yml | 2 +- .github/workflows/gradle_jdk11.yml | 2 +- .github/workflows/gradle_pr.yml | 2 +- .github/workflows/gradle_release.yml | 2 +- .github/workflows/gradle_snapshot.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 16890d4c6d..1fa916340b 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -9,5 +9,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 # v1.1.0 diff --git a/.github/workflows/gradle_branch.yml b/.github/workflows/gradle_branch.yml index ec7bdf9dac..16a9e16ac8 100644 --- a/.github/workflows/gradle_branch.yml +++ b/.github/workflows/gradle_branch.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Set up JDK 8 uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: diff --git a/.github/workflows/gradle_jdk11.yml b/.github/workflows/gradle_jdk11.yml index 0c70a9f45d..41b94589a6 100644 --- a/.github/workflows/gradle_jdk11.yml +++ b/.github/workflows/gradle_jdk11.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Set up JDK 11 uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: diff --git a/.github/workflows/gradle_pr.yml b/.github/workflows/gradle_pr.yml index 49a6a7691e..2325fbb2af 100644 --- a/.github/workflows/gradle_pr.yml +++ b/.github/workflows/gradle_pr.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Set up JDK 8 uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: diff --git a/.github/workflows/gradle_release.yml b/.github/workflows/gradle_release.yml index ca2bce612f..c7fcc0238f 100644 --- a/.github/workflows/gradle_release.yml +++ b/.github/workflows/gradle_release.yml @@ -22,7 +22,7 @@ jobs: env: CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Set up JDK 8 uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: diff --git a/.github/workflows/gradle_snapshot.yml b/.github/workflows/gradle_snapshot.yml index 90ce2fb7b1..863d697dea 100644 --- a/.github/workflows/gradle_snapshot.yml +++ b/.github/workflows/gradle_snapshot.yml @@ -21,7 +21,7 @@ jobs: # ------------------------------------------------------------------------------ CI_BUILD_NUMBER: ${{ github.run_number }} steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Set up JDK 8 uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0 with: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy