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)