Skip to content

Commit 5b3510b

Browse files
authored
3.x: Fix experimental, signatures of throttleLast (#7490)
* 3.x: Fix experimental, signatures. * Fix Observable.sample overload * Fix validator signature override
1 parent 1104c09 commit 5b3510b

File tree

5 files changed

+49
-36
lines changed

5 files changed

+49
-36
lines changed

src/main/java/io/reactivex/rxjava3/core/Flowable.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14729,7 +14729,6 @@ public final Flowable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Sc
1472914729
* <dd>You specify which {@code Scheduler} this operator will use.</dd>
1473014730
* </dl>
1473114731
*
14732-
* <p>History: 2.0.5 - experimental
1473314732
* @param period
1473414733
* the sampling rate
1473514734
* @param unit
@@ -14747,13 +14746,14 @@ public final Flowable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Sc
1474714746
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1474814747
* @see <a href="https://github.com/ReactiveX/RxJava/wiki/Backpressure">RxJava wiki: Backpressure</a>
1474914748
* @see #throttleLast(long, TimeUnit, Scheduler)
14750-
* @since 2.1
14749+
* @since 3.1.6 - Experimental
1475114750
*/
1475214751
@CheckReturnValue
1475314752
@NonNull
1475414753
@BackpressureSupport(BackpressureKind.ERROR)
1475514754
@SchedulerSupport(SchedulerSupport.CUSTOM)
14756-
public final Flowable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, boolean emitLast, @NonNull Consumer<T> onDropped) {
14755+
@Experimental
14756+
public final Flowable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, boolean emitLast, @NonNull Consumer<? super T> onDropped) {
1475714757
Objects.requireNonNull(unit, "unit is null");
1475814758
Objects.requireNonNull(scheduler, "scheduler is null");
1475914759
Objects.requireNonNull(onDropped, "onDropped is null");
@@ -17172,11 +17172,13 @@ public final Flowable<T> throttleFirst(long skipDuration, @NonNull TimeUnit unit
1717217172
* @throws NullPointerException if {@code unit} or {@code scheduler} or {@code onDropped} is {@code null}
1717317173
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1717417174
* @see <a href="https://github.com/ReactiveX/RxJava/wiki/Backpressure">RxJava wiki: Backpressure</a>
17175+
* @since 3.1.6 - Experimental
1717517176
*/
1717617177
@CheckReturnValue
1717717178
@NonNull
1717817179
@BackpressureSupport(BackpressureKind.ERROR)
1717917180
@SchedulerSupport(SchedulerSupport.CUSTOM)
17181+
@Experimental
1718017182
public final Flowable<T> throttleFirst(long skipDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<? super T> onDropped) {
1718117183
Objects.requireNonNull(unit, "unit is null");
1718217184
Objects.requireNonNull(scheduler, "scheduler is null");
@@ -17285,12 +17287,14 @@ public final Flowable<T> throttleLast(long intervalDuration, @NonNull TimeUnit u
1728517287
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1728617288
* @see <a href="https://github.com/ReactiveX/RxJava/wiki/Backpressure">RxJava wiki: Backpressure</a>
1728717289
* @see #sample(long, TimeUnit, Scheduler)
17290+
* @since 3.1.6 - Experimental
1728817291
*/
1728917292
@CheckReturnValue
1729017293
@BackpressureSupport(BackpressureKind.ERROR)
1729117294
@SchedulerSupport(SchedulerSupport.CUSTOM)
1729217295
@NonNull
17293-
public final Flowable<T> throttleLast(long intervalDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<T> onDropped) {
17296+
@Experimental
17297+
public final Flowable<T> throttleLast(long intervalDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<? super T> onDropped) {
1729417298
return sample(intervalDuration, unit, scheduler, false, onDropped);
1729517299
}
1729617300

src/main/java/io/reactivex/rxjava3/core/Observable.java

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12133,49 +12133,51 @@ public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull
1213312133

1213412134
/**
1213512135
* Returns an {@code Observable} that emits the most recently emitted item (if any) emitted by the current {@code Observable}
12136-
* within periodic time intervals, where the intervals are defined on a particular {@link Scheduler}.
12136+
* within periodic time intervals, where the intervals are defined on a particular {@link Scheduler}
12137+
* and optionally emit the very last upstream item when the upstream completes.
1213712138
* <p>
12138-
* <img width="640" height="305" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/sample.s.v3.png" alt="">
12139+
* <img width="640" height="277" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/sample.s.emitlast.png" alt="">
1213912140
* <dl>
1214012141
* <dt><b>Scheduler:</b></dt>
1214112142
* <dd>You specify which {@code Scheduler} this operator will use.</dd>
1214212143
* </dl>
1214312144
*
12145+
* <p>History: 2.0.5 - experimental
1214412146
* @param period
1214512147
* the sampling rate
1214612148
* @param unit
1214712149
* the {@link TimeUnit} in which {@code period} is defined
1214812150
* @param scheduler
1214912151
* the {@code Scheduler} to use when sampling
12150-
* @param onDropped
12151-
* called with the current entry when it has been replaced by a new one
12152+
* @param emitLast
12153+
* if {@code true} and the upstream completes while there is still an unsampled item available,
12154+
* that item is emitted to downstream before completion
12155+
* if {@code false}, an unsampled last item is ignored.
1215212156
* @return the new {@code Observable} instance
12153-
* @throws NullPointerException if {@code unit} or {@code scheduler} is {@code null} or {@code onDropped} is {@code null}
12157+
* @throws NullPointerException if {@code unit} or {@code scheduler} is {@code null}
1215412158
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1215512159
* @see #throttleLast(long, TimeUnit, Scheduler)
12160+
* @since 2.1
1215612161
*/
1215712162
@CheckReturnValue
1215812163
@SchedulerSupport(SchedulerSupport.CUSTOM)
1215912164
@NonNull
12160-
public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<T> onDropped) {
12165+
public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, boolean emitLast) {
1216112166
Objects.requireNonNull(unit, "unit is null");
1216212167
Objects.requireNonNull(scheduler, "scheduler is null");
12163-
Objects.requireNonNull(onDropped, "onDropped is null");
12164-
return RxJavaPlugins.onAssembly(new ObservableSampleTimed<>(this, period, unit, scheduler, false, onDropped));
12168+
return RxJavaPlugins.onAssembly(new ObservableSampleTimed<>(this, period, unit, scheduler, emitLast, null));
1216512169
}
1216612170

1216712171
/**
1216812172
* Returns an {@code Observable} that emits the most recently emitted item (if any) emitted by the current {@code Observable}
12169-
* within periodic time intervals, where the intervals are defined on a particular {@link Scheduler}
12170-
* and optionally emit the very last upstream item when the upstream completes.
12173+
* within periodic time intervals, where the intervals are defined on a particular {@link Scheduler}.
1217112174
* <p>
12172-
* <img width="640" height="277" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/sample.s.emitlast.png" alt="">
12175+
* <img width="640" height="305" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/sample.s.v3.png" alt="">
1217312176
* <dl>
1217412177
* <dt><b>Scheduler:</b></dt>
1217512178
* <dd>You specify which {@code Scheduler} this operator will use.</dd>
1217612179
* </dl>
1217712180
*
12178-
* <p>History: 2.0.5 - experimental
1217912181
* @param period
1218012182
* the sampling rate
1218112183
* @param unit
@@ -12186,19 +12188,23 @@ public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull
1218612188
* if {@code true} and the upstream completes while there is still an unsampled item available,
1218712189
* that item is emitted to downstream before completion
1218812190
* if {@code false}, an unsampled last item is ignored.
12191+
* @param onDropped
12192+
* called with the current entry when it has been replaced by a new one
1218912193
* @return the new {@code Observable} instance
12190-
* @throws NullPointerException if {@code unit} or {@code scheduler} is {@code null}
12194+
* @throws NullPointerException if {@code unit} or {@code scheduler} is {@code null} or {@code onDropped} is {@code null}
1219112195
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1219212196
* @see #throttleLast(long, TimeUnit, Scheduler)
12193-
* @since 2.1
12197+
* @since 3.1.6 - Experimental
1219412198
*/
1219512199
@CheckReturnValue
1219612200
@SchedulerSupport(SchedulerSupport.CUSTOM)
1219712201
@NonNull
12198-
public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, boolean emitLast) {
12202+
@Experimental
12203+
public final Observable<T> sample(long period, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, boolean emitLast, @NonNull Consumer<? super T> onDropped) {
1219912204
Objects.requireNonNull(unit, "unit is null");
1220012205
Objects.requireNonNull(scheduler, "scheduler is null");
12201-
return RxJavaPlugins.onAssembly(new ObservableSampleTimed<>(this, period, unit, scheduler, emitLast, null));
12206+
Objects.requireNonNull(onDropped, "onDropped is null");
12207+
return RxJavaPlugins.onAssembly(new ObservableSampleTimed<>(this, period, unit, scheduler, emitLast, onDropped));
1220212208
}
1220312209

1220412210
/**
@@ -14225,10 +14231,12 @@ public final Observable<T> throttleFirst(long skipDuration, @NonNull TimeUnit un
1422514231
* @return the new {@code Observable} instance
1422614232
* @throws NullPointerException if {@code unit} or {@code scheduler} or {@code onDropped} is {@code null}
1422714233
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
14234+
* @since 3.1.6 - Experimental
1422814235
*/
1422914236
@CheckReturnValue
1423014237
@SchedulerSupport(SchedulerSupport.CUSTOM)
1423114238
@NonNull
14239+
@Experimental
1423214240
public final Observable<T> throttleFirst(long skipDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<? super T> onDropped) {
1423314241
Objects.requireNonNull(unit, "unit is null");
1423414242
Objects.requireNonNull(scheduler, "scheduler is null");
@@ -14293,12 +14301,14 @@ public final Observable<T> throttleLast(long intervalDuration, @NonNull TimeUnit
1429314301
* @throws NullPointerException if {@code unit} or {@code scheduler} is {@code null} or {@code onDropped} is {@code null}
1429414302
* @see <a href="http://reactivex.io/documentation/operators/sample.html">ReactiveX operators documentation: Sample</a>
1429514303
* @see #sample(long, TimeUnit, Scheduler)
14304+
* @since 3.1.6 - Experimental
1429614305
*/
1429714306
@CheckReturnValue
1429814307
@SchedulerSupport(SchedulerSupport.CUSTOM)
1429914308
@NonNull
14300-
public final Observable<T> throttleLast(long intervalDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<T> onDropped) {
14301-
return sample(intervalDuration, unit, scheduler, onDropped);
14309+
@Experimental
14310+
public final Observable<T> throttleLast(long intervalDuration, @NonNull TimeUnit unit, @NonNull Scheduler scheduler, @NonNull Consumer<? super T> onDropped) {
14311+
return sample(intervalDuration, unit, scheduler, false, onDropped);
1430214312
}
1430314313

1430414314
/**

src/main/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableSampleTimed.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public final class FlowableSampleTimed<T> extends AbstractFlowableWithUpstream<T
3232
final TimeUnit unit;
3333
final Scheduler scheduler;
3434
final boolean emitLast;
35-
final Consumer<T> onDropped;
35+
final Consumer<? super T> onDropped;
3636

37-
public FlowableSampleTimed(Flowable<T> source, long period, TimeUnit unit, Scheduler scheduler, boolean emitLast, Consumer<T> onDropped) {
37+
public FlowableSampleTimed(Flowable<T> source, long period, TimeUnit unit, Scheduler scheduler, boolean emitLast, Consumer<? super T> onDropped) {
3838
super(source);
3939
this.period = period;
4040
this.unit = unit;
@@ -61,15 +61,15 @@ abstract static class SampleTimedSubscriber<T> extends AtomicReference<T> implem
6161
final long period;
6262
final TimeUnit unit;
6363
final Scheduler scheduler;
64-
final Consumer<T> onDropped;
64+
final Consumer<? super T> onDropped;
6565

6666
final AtomicLong requested = new AtomicLong();
6767

6868
final SequentialDisposable timer = new SequentialDisposable();
6969

7070
Subscription upstream;
7171

72-
SampleTimedSubscriber(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
72+
SampleTimedSubscriber(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
7373
this.downstream = actual;
7474
this.period = period;
7575
this.unit = unit;
@@ -152,7 +152,7 @@ static final class SampleTimedNoLast<T> extends SampleTimedSubscriber<T> {
152152

153153
private static final long serialVersionUID = -7139995637533111443L;
154154

155-
SampleTimedNoLast(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
155+
SampleTimedNoLast(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
156156
super(actual, period, unit, scheduler, onDropped);
157157
}
158158

@@ -173,7 +173,7 @@ static final class SampleTimedEmitLast<T> extends SampleTimedSubscriber<T> {
173173

174174
final AtomicInteger wip;
175175

176-
SampleTimedEmitLast(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
176+
SampleTimedEmitLast(Subscriber<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
177177
super(actual, period, unit, scheduler, onDropped);
178178
this.wip = new AtomicInteger(1);
179179
}

src/main/java/io/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,20 @@
2222
import io.reactivex.rxjava3.functions.Consumer;
2323
import io.reactivex.rxjava3.internal.disposables.DisposableHelper;
2424
import io.reactivex.rxjava3.observers.SerializedObserver;
25-
import io.reactivex.rxjava3.plugins.RxJavaPlugins;
2625

2726
public final class ObservableSampleTimed<T> extends AbstractObservableWithUpstream<T, T> {
2827
final long period;
2928
final TimeUnit unit;
3029
final Scheduler scheduler;
31-
final Consumer<T> onDropped;
30+
final Consumer<? super T> onDropped;
3231
final boolean emitLast;
3332

3433
public ObservableSampleTimed(ObservableSource<T> source,
3534
long period,
3635
TimeUnit unit,
3736
Scheduler scheduler,
3837
boolean emitLast,
39-
Consumer<T> onDropped) {
38+
Consumer<? super T> onDropped) {
4039
super(source);
4140
this.period = period;
4241
this.unit = unit;
@@ -63,13 +62,13 @@ abstract static class SampleTimedObserver<T> extends AtomicReference<T> implemen
6362
final long period;
6463
final TimeUnit unit;
6564
final Scheduler scheduler;
66-
final Consumer<T> onDropped;
65+
final Consumer<? super T> onDropped;
6766

6867
final AtomicReference<Disposable> timer = new AtomicReference<>();
6968

7069
Disposable upstream;
7170

72-
SampleTimedObserver(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
71+
SampleTimedObserver(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
7372
this.downstream = actual;
7473
this.period = period;
7574
this.unit = unit;
@@ -144,7 +143,7 @@ static final class SampleTimedNoLast<T> extends SampleTimedObserver<T> {
144143

145144
private static final long serialVersionUID = -7139995637533111443L;
146145

147-
SampleTimedNoLast(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
146+
SampleTimedNoLast(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
148147
super(actual, period, unit, scheduler, onDropped);
149148
}
150149

@@ -165,7 +164,7 @@ static final class SampleTimedEmitLast<T> extends SampleTimedObserver<T> {
165164

166165
final AtomicInteger wip;
167166

168-
SampleTimedEmitLast(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<T> onDropped) {
167+
SampleTimedEmitLast(Observer<? super T> actual, long period, TimeUnit unit, Scheduler scheduler, Consumer<? super T> onDropped) {
169168
super(actual, period, unit, scheduler, onDropped);
170169
this.wip = new AtomicInteger(1);
171170
}

src/test/java/io/reactivex/rxjava3/validators/ParamValidationCheckerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,8 +437,8 @@ public void checkParallelFlowable() {
437437
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class));
438438
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class, Boolean.TYPE));
439439
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class, Scheduler.class));
440-
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class, Scheduler.class, Consumer.class));
441440
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class, Scheduler.class, Boolean.TYPE));
441+
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "sample", Long.TYPE, TimeUnit.class, Scheduler.class, Boolean.TYPE, Consumer.class));
442442

443443
// negative time is considered as zero time
444444
addOverride(new ParamOverride(Observable.class, 0, ParamMode.ANY, "takeLast", Long.TYPE, TimeUnit.class));

0 commit comments

Comments
 (0)
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