You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Summary of changes:
* SharedFlow, MutableSharedFlow and its constructor.
* StateFlow implements SharedFlow.
* SharedFlow.onSubscription operator, clarified docs in other onXxx operators.
* BufferOverflow strategy in kotlinx.coroutines.channels package.
* shareIn and stateIn operators and SharingStarted strategies for them.
* SharedFlow.flowOn error lint (up from StateFlow).
* Precise cancellable() operator fusion.
* Precise distinctUntilChanged() operator fusion.
* StateFlow.compareAndSet function.
* asStateFlow and asSharedFlow read-only view functions.
* Consistently clarified docs on cold vs hot flows.
* Future deprecation notice for BroadcastChannel, ConflatedBroadcastChannel, broadcast, and broadcastIn.
This is a DRAFT. Parts that are not done yet:
* BufferOverflow strategy support in channels.
* Sharing operators conflation with preceding buffer(...) operator and the corresponding tests.
* Better functional tests for SharingStarted strategies.
* Test cancellability of shared flows.
* Add reactive operator migration hints.
Fixes#2034Fixes#2047
Copy file name to clipboardExpand all lines: kotlinx-coroutines-core/api/kotlinx-coroutines-core.api
+62-4
Original file line number
Diff line number
Diff line change
@@ -578,6 +578,14 @@ public final class kotlinx/coroutines/channels/BroadcastKt {
578
578
public static synthetic fun broadcast$default (Lkotlinx/coroutines/channels/ReceiveChannel;ILkotlinx/coroutines/CoroutineStart;ILjava/lang/Object;)Lkotlinx/coroutines/channels/BroadcastChannel;
579
579
}
580
580
581
+
public final class kotlinx/coroutines/channels/BufferOverflow : java/lang/Enum {
582
+
public static final field DROP_LATEST Lkotlinx/coroutines/channels/BufferOverflow;
583
+
public static final field KEEP_LATEST Lkotlinx/coroutines/channels/BufferOverflow;
584
+
public static final field SUSPEND Lkotlinx/coroutines/channels/BufferOverflow;
585
+
public static fun valueOf (Ljava/lang/String;)Lkotlinx/coroutines/channels/BufferOverflow;
586
+
public static fun values ()[Lkotlinx/coroutines/channels/BufferOverflow;
587
+
}
588
+
581
589
public abstract interface class kotlinx/coroutines/channels/Channel : kotlinx/coroutines/channels/ReceiveChannel, kotlinx/coroutines/channels/SendChannel {
582
590
public static final field BUFFERED I
583
591
public static final field CONFLATED I
@@ -842,7 +850,7 @@ public synthetic class kotlinx/coroutines/debug/internal/DebugProbesImplSequence
842
850
public fun <init> (J)V
843
851
}
844
852
845
-
public abstract class kotlinx/coroutines/flow/AbstractFlow : kotlinx/coroutines/flow/Flow {
853
+
public abstract class kotlinx/coroutines/flow/AbstractFlow : kotlinx/coroutines/flow/CancellableFlow, kotlinx/coroutines/flow/Flow {
846
854
public fun <init> ()V
847
855
public final fun collect (Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
848
856
public abstract fun collectSafely (Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -869,6 +877,8 @@ public final class kotlinx/coroutines/flow/FlowKt {
869
877
public static final fun asFlow ([I)Lkotlinx/coroutines/flow/Flow;
870
878
public static final fun asFlow ([J)Lkotlinx/coroutines/flow/Flow;
871
879
public static final fun asFlow ([Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
880
+
public static final fun asSharedFlow (Lkotlinx/coroutines/flow/MutableSharedFlow;)Lkotlinx/coroutines/flow/SharedFlow;
881
+
public static final fun asStateFlow (Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;
872
882
public static final fun broadcastIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/CoroutineStart;)Lkotlinx/coroutines/channels/BroadcastChannel;
873
883
public static synthetic fun broadcastIn$default (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/CoroutineStart;ILjava/lang/Object;)Lkotlinx/coroutines/channels/BroadcastChannel;
874
884
public static final fun buffer (Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
@@ -962,6 +972,7 @@ public final class kotlinx/coroutines/flow/FlowKt {
962
972
public static final fun onErrorReturn (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow;
963
973
public static synthetic fun onErrorReturn$default (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
964
974
public static final fun onStart (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
975
+
public static final fun onSubscription (Lkotlinx/coroutines/flow/SharedFlow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/SharedFlow;
965
976
public static final fun produceIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;
966
977
public static final fun publishOn (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;
967
978
public static final fun receiveAsFlow (Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow;
@@ -976,11 +987,16 @@ public final class kotlinx/coroutines/flow/FlowKt {
976
987
public static final fun scan (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
977
988
public static final fun scanFold (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
978
989
public static final fun scanReduce (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
990
+
public static final fun shareIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;ILkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow;
991
+
public static synthetic fun shareIn$default (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;ILkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;ILjava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow;
979
992
public static final fun single (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
980
993
public static final fun singleOrNull (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
981
994
public static final fun skip (Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
982
995
public static final fun startWith (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
983
996
public static final fun startWith (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
997
+
public static final fun stateIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
998
+
public static final fun stateIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;
999
+
public static synthetic fun stateIn$default (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;ILjava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;
984
1000
public static final fun subscribe (Lkotlinx/coroutines/flow/Flow;)V
985
1001
public static final fun subscribe (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V
986
1002
public static final fun subscribe (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V
@@ -1001,17 +1017,55 @@ public final class kotlinx/coroutines/flow/FlowKt {
1001
1017
}
1002
1018
1003
1019
public final class kotlinx/coroutines/flow/LintKt {
1020
+
public static final fun cancellable (Lkotlinx/coroutines/flow/SharedFlow;)Lkotlinx/coroutines/flow/Flow;
1004
1021
public static final fun conflate (Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
1005
1022
public static final fun distinctUntilChanged (Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
1006
-
public static final fun flowOn (Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;
1023
+
public static final fun flowOn (Lkotlinx/coroutines/flow/SharedFlow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;
1024
+
}
1025
+
1026
+
public abstract interface class kotlinx/coroutines/flow/MutableSharedFlow : kotlinx/coroutines/flow/FlowCollector, kotlinx/coroutines/flow/SharedFlow {
1027
+
public abstract fun getSubscriptionCount ()Lkotlinx/coroutines/flow/StateFlow;
1028
+
public abstract fun resetBuffer ()V
1029
+
public abstract fun tryEmit (Ljava/lang/Object;)Z
1007
1030
}
1008
1031
1009
-
public abstract interface class kotlinx/coroutines/flow/MutableStateFlow : kotlinx/coroutines/flow/StateFlow {
1032
+
public abstract interface class kotlinx/coroutines/flow/MutableStateFlow : kotlinx/coroutines/flow/MutableSharedFlow, kotlinx/coroutines/flow/StateFlow {
1033
+
public abstract fun compareAndSet (Ljava/lang/Object;Ljava/lang/Object;)Z
1010
1034
public abstract fun getValue ()Ljava/lang/Object;
1011
1035
public abstract fun setValue (Ljava/lang/Object;)V
1012
1036
}
1013
1037
1014
-
public abstract interface class kotlinx/coroutines/flow/StateFlow : kotlinx/coroutines/flow/Flow {
1038
+
public abstract interface class kotlinx/coroutines/flow/SharedFlow : kotlinx/coroutines/flow/Flow {
1039
+
public abstract fun getReplayCache ()Ljava/util/List;
1040
+
}
1041
+
1042
+
public final class kotlinx/coroutines/flow/SharedFlowKt {
1043
+
public static final fun MutableSharedFlow (IILkotlinx/coroutines/channels/BufferOverflow;Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow;
1044
+
public static synthetic fun MutableSharedFlow$default (IILkotlinx/coroutines/channels/BufferOverflow;Ljava/lang/Object;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow;
1045
+
}
1046
+
1047
+
public final class kotlinx/coroutines/flow/SharingCommand : java/lang/Enum {
1048
+
public static final field START Lkotlinx/coroutines/flow/SharingCommand;
1049
+
public static final field STOP Lkotlinx/coroutines/flow/SharingCommand;
1050
+
public static final field STOP_AND_RESET_BUFFER Lkotlinx/coroutines/flow/SharingCommand;
1051
+
public static fun valueOf (Ljava/lang/String;)Lkotlinx/coroutines/flow/SharingCommand;
1052
+
public static fun values ()[Lkotlinx/coroutines/flow/SharingCommand;
1053
+
}
1054
+
1055
+
public abstract interface class kotlinx/coroutines/flow/SharingStarted {
1056
+
public static final field Companion Lkotlinx/coroutines/flow/SharingStarted$Companion;
1057
+
public abstract fun commandFlow (Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
1058
+
}
1059
+
1060
+
public final class kotlinx/coroutines/flow/SharingStarted$Companion {
1061
+
public final fun WhileSubscribed (JJ)Lkotlinx/coroutines/flow/SharingStarted;
1062
+
public static synthetic fun WhileSubscribed$default (Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted;
1063
+
public final fun getEagerly ()Lkotlinx/coroutines/flow/SharingStarted;
1064
+
public final fun getLazily ()Lkotlinx/coroutines/flow/SharingStarted;
1065
+
public final fun getWhileSubscribed ()Lkotlinx/coroutines/flow/SharingStarted;
1066
+
}
1067
+
1068
+
public abstract interface class kotlinx/coroutines/flow/StateFlow : kotlinx/coroutines/flow/SharedFlow {
1015
1069
public abstract fun getValue ()Ljava/lang/Object;
1016
1070
}
1017
1071
@@ -1037,6 +1091,10 @@ public final class kotlinx/coroutines/flow/internal/CombineKt {
1037
1091
public static final fun combineInternal (Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
1038
1092
}
1039
1093
1094
+
public final class kotlinx/coroutines/flow/internal/DistinctFlowKt {
1095
+
public static final fun unsafeDistinctFlow (ZLkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
1096
+
}
1097
+
1040
1098
public final class kotlinx/coroutines/flow/internal/FlowExceptions_commonKt {
0 commit comments