Skip to content

Commit 14f42ee

Browse files
Merge pull request #1610 from benjchristensen/multicast-without-factory
Deprecate Multicast without Factory
2 parents 6d0f240 + 3eec198 commit 14f42ee

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

rxjava-core/src/main/java/rx/Observable.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6002,7 +6002,9 @@ public final <TIntermediate, TResult> Observable<TResult> multicast(
60026002
* into the specified {@link Subject}
60036003
* @see <a href="https://github.com/Netflix/RxJava/wiki/Connectable-Observable-Operators#observablepublish-and-observablemulticast">RxJava wiki: Observable.publish and Observable.multicast</a>
60046004
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229708.aspx">MSDN: Observable.Multicast</a>
6005+
* @deprecated Use multicast(Func0<Subject>) instead. This one caused nuanced bugs as it retains state.
60056006
*/
6007+
@Deprecated
60066008
public final <R> ConnectableObservable<R> multicast(final Subject<? super T, ? extends R> subject) {
60076009
return new OperatorMulticast<T, R>(this, new Func0<Subject<? super T, ? extends R>>() {
60086010

rxjava-core/src/test/java/rx/internal/operators/OnSubscribeMulticastTest.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import rx.Observer;
2626
import rx.Subscription;
27+
import rx.functions.Func0;
2728
import rx.observables.ConnectableObservable;
2829
import rx.subjects.PublishSubject;
2930
import rx.subjects.Subject;
@@ -34,8 +35,7 @@ public class OnSubscribeMulticastTest {
3435
public void testMulticast() {
3536
Subject<String, String> source = PublishSubject.create();
3637

37-
ConnectableObservable<String> multicasted = source.multicast(
38-
PublishSubject.<String> create());
38+
ConnectableObservable<String> multicasted = source.multicast(new PublishSubjectFactory());
3939

4040
@SuppressWarnings("unchecked")
4141
Observer<String> observer = mock(Observer.class);
@@ -62,8 +62,7 @@ public void testMulticast() {
6262
public void testMulticastConnectTwice() {
6363
Subject<String, String> source = PublishSubject.create();
6464

65-
ConnectableObservable<String> multicasted = source.multicast(
66-
PublishSubject.<String> create());
65+
ConnectableObservable<String> multicasted = source.multicast(new PublishSubjectFactory());
6766

6867
@SuppressWarnings("unchecked")
6968
Observer<String> observer = mock(Observer.class);
@@ -87,8 +86,7 @@ public void testMulticastConnectTwice() {
8786
public void testMulticastDisconnect() {
8887
Subject<String, String> source = PublishSubject.create();
8988

90-
ConnectableObservable<String> multicasted = source.multicast(
91-
PublishSubject.<String> create());
89+
ConnectableObservable<String> multicasted = source.multicast(new PublishSubjectFactory());
9290

9391
@SuppressWarnings("unchecked")
9492
Observer<String> observer = mock(Observer.class);
@@ -102,6 +100,9 @@ public void testMulticastDisconnect() {
102100
connection.unsubscribe();
103101
source.onNext("three");
104102

103+
// subscribe again
104+
multicasted.subscribe(observer);
105+
// reconnect
105106
multicasted.connect();
106107
source.onNext("four");
107108
source.onCompleted();
@@ -113,4 +114,13 @@ public void testMulticastDisconnect() {
113114
verify(observer, times(1)).onCompleted();
114115

115116
}
117+
118+
private static final class PublishSubjectFactory implements Func0<Subject<String, String>> {
119+
120+
@Override
121+
public Subject<String, String> call() {
122+
return PublishSubject.<String> create();
123+
}
124+
125+
}
116126
}

0 commit comments

Comments
 (0)