Skip to content

Commit ae0c842

Browse files
authored
Promote deprecation levels for release 1.6.0 (#3024)
1 parent 9099b03 commit ae0c842

File tree

25 files changed

+62
-710
lines changed

25 files changed

+62
-710
lines changed

kotlinx-coroutines-core/api/kotlinx-coroutines-core.api

-10
Original file line numberDiff line numberDiff line change
@@ -889,8 +889,6 @@ public final class kotlinx/coroutines/flow/FlowKt {
889889
public static final fun asFlow ([Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
890890
public static final fun asSharedFlow (Lkotlinx/coroutines/flow/MutableSharedFlow;)Lkotlinx/coroutines/flow/SharedFlow;
891891
public static final fun asStateFlow (Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;
892-
public static final fun broadcastIn (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/CoroutineStart;)Lkotlinx/coroutines/channels/BroadcastChannel;
893-
public static synthetic fun broadcastIn$default (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/CoroutineStart;ILjava/lang/Object;)Lkotlinx/coroutines/channels/BroadcastChannel;
894892
public static final synthetic fun buffer (Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
895893
public static final fun buffer (Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
896894
public static synthetic fun buffer$default (Lkotlinx/coroutines/flow/Flow;IILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
@@ -961,10 +959,6 @@ public final class kotlinx/coroutines/flow/FlowKt {
961959
public static final fun flowOf (Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
962960
public static final fun flowOf ([Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
963961
public static final fun flowOn (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;
964-
public static final fun flowViaChannel (ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
965-
public static synthetic fun flowViaChannel$default (ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
966-
public static final fun flowWith (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow;
967-
public static synthetic fun flowWith$default (Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
968962
public static final fun fold (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
969963
public static final fun forEach (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V
970964
public static final fun getDEFAULT_CONCURRENCY ()I
@@ -981,8 +975,6 @@ public final class kotlinx/coroutines/flow/FlowKt {
981975
public static final fun onCompletion (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
982976
public static final fun onEach (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
983977
public static final fun onEmpty (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
984-
public static final fun onErrorCollect (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow;
985-
public static synthetic fun onErrorCollect$default (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
986978
public static final fun onErrorResume (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
987979
public static final fun onErrorResumeNext (Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
988980
public static final fun onErrorReturn (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
@@ -998,9 +990,7 @@ public final class kotlinx/coroutines/flow/FlowKt {
998990
public static final fun reduce (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
999991
public static final fun replay (Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
1000992
public static final fun replay (Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
1001-
public static final synthetic fun retry (Lkotlinx/coroutines/flow/Flow;ILkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow;
1002993
public static final fun retry (Lkotlinx/coroutines/flow/Flow;JLkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
1003-
public static synthetic fun retry$default (Lkotlinx/coroutines/flow/Flow;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
1004994
public static synthetic fun retry$default (Lkotlinx/coroutines/flow/Flow;JLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
1005995
public static final fun retryWhen (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow;
1006996
public static final fun runningFold (Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;

kotlinx-coroutines-core/common/README.md

-9
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ This module provides debugging facilities for coroutines (run JVM with `-ea` or
6666
and [newCoroutineContext] function to write user-defined coroutine builders that work with these
6767
debugging facilities. See [DEBUG_PROPERTY_NAME] for more details.
6868

69-
This module provides a special CoroutineContext type [TestCoroutineCoroutineContext][kotlinx.coroutines.test.TestCoroutineContext] that
70-
allows the writer of code that contains Coroutines with delays and timeouts to write non-flaky unit-tests for that code allowing these tests to
71-
terminate in near zero time. See the documentation for this class for more information.
72-
7369
# Package kotlinx.coroutines
7470

7571
General-purpose coroutine builders, contexts, and helper functions.
@@ -130,7 +126,6 @@ Low-level primitives for finer-grained control of coroutines.
130126

131127
[kotlinx.coroutines.sync.Mutex]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.sync/-mutex/index.html
132128
[kotlinx.coroutines.sync.Mutex.lock]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.sync/-mutex/lock.html
133-
[kotlinx.coroutines.sync.Mutex.tryLock]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.sync/-mutex/try-lock.html
134129

135130
<!--- INDEX kotlinx.coroutines.channels -->
136131

@@ -155,8 +150,4 @@ Low-level primitives for finer-grained control of coroutines.
155150
[kotlinx.coroutines.selects.select]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.selects/select.html
156151
[kotlinx.coroutines.selects.SelectBuilder.onTimeout]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.selects/on-timeout.html
157152

158-
<!--- INDEX kotlinx.coroutines.test -->
159-
160-
[kotlinx.coroutines.test.TestCoroutineContext]: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.test/-test-coroutine-context/index.html
161-
162153
<!--- END -->

kotlinx-coroutines-core/common/src/channels/AbstractChannel.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ internal abstract class AbstractSendChannel<E>(
136136
return sendSuspend(element)
137137
}
138138

139-
@Suppress("DEPRECATION")
139+
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
140140
override fun offer(element: E): Boolean {
141141
// Temporary migration for offer users who rely on onUndeliveredElement
142142
try {

kotlinx-coroutines-core/common/src/channels/Channel.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ public interface SendChannel<in E> {
157157
* @suppress **Deprecated**.
158158
*/
159159
@Deprecated(
160-
level = DeprecationLevel.WARNING,
160+
level = DeprecationLevel.ERROR,
161161
message = "Deprecated in the favour of 'trySend' method",
162162
replaceWith = ReplaceWith("trySend(element).isSuccess")
163-
) // Warning since 1.5.0
163+
) // Warning since 1.5.0, error since 1.6.0
164164
public fun offer(element: E): Boolean {
165165
val result = trySend(element)
166166
if (result.isSuccess) return true
@@ -313,12 +313,12 @@ public interface ReceiveChannel<out E> {
313313
* @suppress **Deprecated**.
314314
*/
315315
@Deprecated(
316-
level = DeprecationLevel.WARNING,
316+
level = DeprecationLevel.ERROR,
317317
message = "Deprecated in the favour of 'tryReceive'. " +
318318
"Please note that the provided replacement does not rethrow channel's close cause as 'poll' did, " +
319319
"for the precise replacement please refer to the 'poll' documentation",
320320
replaceWith = ReplaceWith("tryReceive().getOrNull()")
321-
) // Warning since 1.5.0
321+
) // Warning since 1.5.0, error since 1.6.0
322322
public fun poll(): E? {
323323
val result = tryReceive()
324324
if (result.isSuccess) return result.getOrThrow()
@@ -364,7 +364,7 @@ public interface ReceiveChannel<out E> {
364364
message = "Deprecated in favor of onReceiveCatching extension",
365365
level = DeprecationLevel.ERROR,
366366
replaceWith = ReplaceWith("onReceiveCatching")
367-
) // Warning since 1.3.0, error in 1.5.0, will be hidden or removed in 1.6.0
367+
) // Warning since 1.3.0, error in 1.5.0, will be hidden or removed in 1.7.0
368368
public val onReceiveOrNull: SelectClause1<E?>
369369
get() {
370370
return object : SelectClause1<E?> {

kotlinx-coroutines-core/common/src/channels/Channels.common.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public inline fun <E, R> BroadcastChannel<E>.consume(block: ReceiveChannel<E>.()
5050
@Deprecated(
5151
"Deprecated in the favour of 'receiveCatching'",
5252
ReplaceWith("receiveCatching().getOrNull()"),
53-
DeprecationLevel.WARNING
53+
DeprecationLevel.ERROR
5454
) // Warning since 1.5.0, ERROR in 1.6.0, HIDDEN in 1.7.0
5555
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
5656
public suspend fun <E : Any> ReceiveChannel<E>.receiveOrNull(): E? {
@@ -63,7 +63,7 @@ public suspend fun <E : Any> ReceiveChannel<E>.receiveOrNull(): E? {
6363
*/
6464
@Deprecated(
6565
"Deprecated in the favour of 'onReceiveCatching'",
66-
level = DeprecationLevel.WARNING
66+
level = DeprecationLevel.ERROR
6767
) // Warning since 1.5.0, ERROR in 1.6.0, HIDDEN in 1.7.0
6868
public fun <E : Any> ReceiveChannel<E>.onReceiveOrNull(): SelectClause1<E?> {
6969
@Suppress("DEPRECATION", "UNCHECKED_CAST")

kotlinx-coroutines-core/common/src/flow/Builders.kt

-19
Original file line numberDiff line numberDiff line change
@@ -198,25 +198,6 @@ public fun LongRange.asFlow(): Flow<Long> = flow {
198198
}
199199
}
200200

201-
/**
202-
* @suppress
203-
*/
204-
@FlowPreview
205-
@Deprecated(
206-
message = "Use channelFlow with awaitClose { } instead of flowViaChannel and invokeOnClose { }.",
207-
level = DeprecationLevel.ERROR
208-
) // To be removed in 1.4.x
209-
@Suppress("DeprecatedCallableAddReplaceWith")
210-
public fun <T> flowViaChannel(
211-
bufferSize: Int = BUFFERED,
212-
@BuilderInference block: CoroutineScope.(channel: SendChannel<T>) -> Unit
213-
): Flow<T> {
214-
return channelFlow<T> {
215-
block(channel)
216-
awaitClose()
217-
}.buffer(bufferSize)
218-
}
219-
220201
/**
221202
* Creates an instance of a _cold_ [Flow] with elements that are sent to a [SendChannel]
222203
* provided to the builder's [block] of code via [ProducerScope]. It allows elements to be

kotlinx-coroutines-core/common/src/flow/Channels.kt

-35
Original file line numberDiff line numberDiff line change
@@ -178,41 +178,6 @@ public fun <T> BroadcastChannel<T>.asFlow(): Flow<T> = flow {
178178
emitAll(openSubscription())
179179
}
180180

181-
/**
182-
* ### Deprecated
183-
*
184-
* **This API is deprecated.** The [BroadcastChannel] provides a complex channel-like API for hot flows.
185-
* [SharedFlow] is an easier-to-use and more flow-centric API for the same purposes, so using
186-
* [shareIn] operator is preferred. It is not a direct replacement, so please
187-
* study [shareIn] documentation to see what kind of shared flow fits your use-case. As a rule of thumb:
188-
*
189-
* * Replace `broadcastIn(scope)` and `broadcastIn(scope, CoroutineStart.LAZY)` with `shareIn(scope, 0, SharingStarted.Lazily)`.
190-
* * Replace `broadcastIn(scope, CoroutineStart.DEFAULT)` with `shareIn(scope, 0, SharingStarted.Eagerly)`.
191-
*/
192-
@Deprecated(
193-
message = "Use shareIn operator and the resulting SharedFlow as a replacement for BroadcastChannel",
194-
replaceWith = ReplaceWith("this.shareIn(scope, SharingStarted.Lazily, 0)"),
195-
level = DeprecationLevel.ERROR
196-
) // WARNING in 1.4.0, error in 1.5.0, removed in 1.6.0 (was @FlowPreview)
197-
public fun <T> Flow<T>.broadcastIn(
198-
scope: CoroutineScope,
199-
start: CoroutineStart = CoroutineStart.LAZY
200-
): BroadcastChannel<T> {
201-
// Backwards compatibility with operator fusing
202-
val channelFlow = asChannelFlow()
203-
val capacity = when (channelFlow.onBufferOverflow) {
204-
BufferOverflow.SUSPEND -> channelFlow.produceCapacity
205-
BufferOverflow.DROP_OLDEST -> Channel.CONFLATED
206-
BufferOverflow.DROP_LATEST ->
207-
throw IllegalArgumentException("Broadcast channel does not support BufferOverflow.DROP_LATEST")
208-
}
209-
return scope.broadcast(channelFlow.context, capacity = capacity, start = start) {
210-
collect { value ->
211-
send(value)
212-
}
213-
}
214-
}
215-
216181
/**
217182
* Creates a [produce] coroutine that collects the given flow.
218183
*

kotlinx-coroutines-core/common/src/flow/operators/Context.kt

-58
Original file line numberDiff line numberDiff line change
@@ -277,64 +277,6 @@ private class CancellableFlowImpl<T>(private val flow: Flow<T>) : CancellableFlo
277277
}
278278
}
279279

280-
/**
281-
* The operator that changes the context where all transformations applied to the given flow within a [builder] are executed.
282-
* This operator is context preserving and does not affect the context of the preceding and subsequent operations.
283-
*
284-
* Example:
285-
*
286-
* ```
287-
* flow // not affected
288-
* .map { ... } // Not affected
289-
* .flowWith(Dispatchers.IO) {
290-
* map { ... } // in IO
291-
* .filter { ... } // in IO
292-
* }
293-
* .map { ... } // Not affected
294-
* ```
295-
*
296-
* For more explanation of context preservation please refer to [Flow] documentation.
297-
*
298-
* This operator is deprecated without replacement because it was discovered that it doesn't play well with coroutines
299-
* and flow semantics:
300-
*
301-
* 1) It doesn't prevent context elements from the downstream to leak into its body
302-
* ```
303-
* flowOf(1).flowWith(EmptyCoroutineContext) {
304-
* onEach { println(kotlin.coroutines.coroutineContext[CoroutineName]) } // Will print 42
305-
* }.flowOn(CoroutineName(42))
306-
* ```
307-
* 2) To avoid such leaks, new primitive should be introduced to `kotlinx.coroutines` -- the subtraction of contexts.
308-
* And this will become a new concept to learn, maintain and explain.
309-
* 3) It defers the execution of declarative [builder] until the moment of [collection][Flow.collect] similarly
310-
* to `Observable.defer`. But it is unexpected because nothing in the name `flowWith` reflects this fact.
311-
* 4) It can be confused with [flowOn] operator, though [flowWith] is much rarer.
312-
*
313-
* @suppress
314-
*/
315-
@FlowPreview
316-
@Deprecated(message = "flowWith is deprecated without replacement, please refer to its KDoc for an explanation", level = DeprecationLevel.ERROR) // Error in beta release, removal in 1.4
317-
public fun <T, R> Flow<T>.flowWith(
318-
flowContext: CoroutineContext,
319-
bufferSize: Int = BUFFERED,
320-
builder: Flow<T>.() -> Flow<R>
321-
): Flow<R> {
322-
checkFlowContext(flowContext)
323-
val source = this
324-
return unsafeFlow {
325-
/**
326-
* Here we should remove a Job instance from the context.
327-
* All builders are written using scoping and no global coroutines are launched, so it is safe not to provide explicit Job.
328-
* It is also necessary not to mess with cancellation if multiple flowWith are used.
329-
*/
330-
val originalContext = currentCoroutineContext().minusKey(Job)
331-
val prepared = source.flowOn(originalContext).buffer(bufferSize)
332-
builder(prepared).flowOn(flowContext).buffer(bufferSize).collect { value ->
333-
return@collect emit(value)
334-
}
335-
}
336-
}
337-
338280
private fun checkFlowContext(context: CoroutineContext) {
339281
require(context[Job] == null) {
340282
"Flow context cannot contain job in it. Had $context"

kotlinx-coroutines-core/common/src/flow/operators/Errors.kt

-39
Original file line numberDiff line numberDiff line change
@@ -60,35 +60,6 @@ public fun <T> Flow<T>.catch(action: suspend FlowCollector<T>.(cause: Throwable)
6060
if (exception != null) action(exception)
6161
}
6262

63-
/**
64-
* @suppress **Deprecated**: Use `(Throwable) -> Boolean` functional type
65-
*/
66-
@Deprecated(
67-
level = DeprecationLevel.ERROR,
68-
message = "Use (Throwable) -> Boolean functional type",
69-
replaceWith = ReplaceWith("(Throwable) -> Boolean")
70-
)
71-
public typealias ExceptionPredicate = (Throwable) -> Boolean
72-
73-
/**
74-
* Switches to the [fallback] flow if the original flow throws an exception that matches the [predicate].
75-
* Cancellation exceptions that were caused by the direct [cancel] call are not handled by this operator.
76-
*
77-
* @suppress **Deprecated**: Use `catch { e -> if (predicate(e)) emitAll(fallback) else throw e }`
78-
*/
79-
@Deprecated(
80-
level = DeprecationLevel.ERROR,
81-
message = "Use catch { e -> if (predicate(e)) emitAll(fallback) else throw e }",
82-
replaceWith = ReplaceWith("catch { e -> if (predicate(e)) emitAll(fallback) else throw e }")
83-
)
84-
public fun <T> Flow<T>.onErrorCollect(
85-
fallback: Flow<T>,
86-
predicate: (Throwable) -> Boolean = { true }
87-
): Flow<T> = catch { e ->
88-
if (!predicate(e)) throw e
89-
emitAll(fallback)
90-
}
91-
9263
/**
9364
* Retries collection of the given flow up to [retries] times when an exception that matches the
9465
* given [predicate] occurs in the upstream flow. This operator is *transparent* to exceptions that occur
@@ -124,16 +95,6 @@ public fun <T> Flow<T>.retry(
12495
return retryWhen { cause, attempt -> attempt < retries && predicate(cause) }
12596
}
12697

127-
@FlowPreview
128-
@Deprecated(level = DeprecationLevel.HIDDEN, message = "binary compatibility with retries: Int preview version")
129-
public fun <T> Flow<T>.retry(
130-
retries: Int = Int.MAX_VALUE,
131-
predicate: (Throwable) -> Boolean = { true }
132-
): Flow<T> {
133-
require(retries > 0) { "Expected positive amount of retries, but had $retries" }
134-
return retryWhen { cause, attempt -> predicate(cause) && attempt < retries }
135-
}
136-
13798
/**
13899
* Retries collection of the given flow when an exception occurs in the upstream flow and the
139100
* [predicate] returns true. The predicate also receives an `attempt` number as parameter,

kotlinx-coroutines-core/common/src/sync/Mutex.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public interface Mutex {
6565
* Deprecated for removal without built-in replacement.
6666
*/
6767
@Deprecated(level = DeprecationLevel.WARNING, message = "Mutex.onLock deprecated without replacement. " +
68-
"For additional details please refer to #2794")
68+
"For additional details please refer to #2794") // WARNING since 1.6.0
6969
public val onLock: SelectClause2<Any?, Mutex>
7070

7171
/**

kotlinx-coroutines-core/jvm/src/channels/Actor.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private class LazyActorCoroutine<E>(
163163
return super.send(element)
164164
}
165165

166-
@Suppress("DEPRECATION")
166+
@Suppress("DEPRECATION", "DEPRECATION_ERROR")
167167
override fun offer(element: E): Boolean {
168168
start()
169169
return super.offer(element)

kotlinx-coroutines-core/jvm/src/channels/Channels.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ import kotlinx.coroutines.*
4343
* ```
4444
*/
4545
@Deprecated(
46-
level = DeprecationLevel.WARNING,
46+
level = DeprecationLevel.ERROR,
4747
message = "Deprecated in the favour of 'trySendBlocking'. " +
4848
"Consider handling the result of 'trySendBlocking' explicitly and rethrow exception if necessary",
4949
replaceWith = ReplaceWith("trySendBlocking(element)")
50-
)
50+
) // WARNING in 1.5.0, ERROR in 1.6.0, HIDDEN in 1.7.0
5151
public fun <E> SendChannel<E>.sendBlocking(element: E) {
5252
// fast path
5353
if (trySend(element).isSuccess)

kotlinx-coroutines-core/jvm/src/scheduling/Deprecated.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import kotlin.coroutines.*
1818
* To preserve backwards compatibility with Ktor 1.x, previous version of the code is
1919
* extracted here as is and isolated from the rest of code base, so R8 can get rid of it.
2020
*
21-
* It should be removed after Kotlin 3.0.0 (EOL of Ktor 1.x) around 2022.
21+
* It should be removed after Ktor 3.0.0 (EOL of Ktor 1.x) around 2022.
2222
*/
2323
@PublishedApi
2424
internal open class ExperimentalCoroutineDispatcher(

0 commit comments

Comments
 (0)