Add BuildInference annotation onto stdlib coroutine builders

This commit is contained in:
Mikhail Zarechenskiy
2018-09-18 18:15:34 +03:00
parent bc6e091004
commit d7f2eeb6e8
5 changed files with 13 additions and 6 deletions
+1
View File
@@ -71,6 +71,7 @@ compileCoroutinesKotlinCommon {
freeCompilerArgs = [
"-module-name", project.name+"-coroutines",
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
"-Xuse-experimental=kotlin.Experimental",
"-XXLanguage:-ReleaseCoroutines",
"-Xallow-kotlin-package",
"-Xallow-result-return-type"
@@ -5,11 +5,13 @@
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("SequenceBuilderKt")
@file:UseExperimental(ExperimentalTypeInference::class)
package kotlin.coroutines.experimental
import kotlin.*
import kotlin.coroutines.experimental.intrinsics.*
import kotlin.experimental.ExperimentalTypeInference
/**
* Builds a [Sequence] lazily yielding values one by one.
@@ -20,7 +22,7 @@ import kotlin.coroutines.experimental.intrinsics.*
* @sample samples.collections.Sequences.Building.buildFibonacciSequence
*/
@SinceKotlin("1.1")
public fun <T> buildSequence(builderAction: suspend SequenceBuilder<T>.() -> Unit): Sequence<T> = Sequence { buildIterator(builderAction) }
public fun <T> buildSequence(@BuilderInference builderAction: suspend SequenceBuilder<T>.() -> Unit): Sequence<T> = Sequence { buildIterator(builderAction) }
/**
* Builds an [Iterator] lazily yielding values one by one.
@@ -29,7 +31,7 @@ public fun <T> buildSequence(builderAction: suspend SequenceBuilder<T>.() -> Uni
* @sample samples.collections.Iterables.Building.iterable
*/
@SinceKotlin("1.1")
public fun <T> buildIterator(builderAction: suspend SequenceBuilder<T>.() -> Unit): Iterator<T> {
public fun <T> buildIterator(@BuilderInference builderAction: suspend SequenceBuilder<T>.() -> Unit): Iterator<T> {
val iterator = SequenceBuilderIterator<T>()
iterator.nextStep = builderAction.createCoroutineUnchecked(receiver = iterator, completion = iterator)
return iterator
@@ -5,12 +5,14 @@
@file:kotlin.jvm.JvmMultifileClass
@file:kotlin.jvm.JvmName("SequencesKt")
@file:UseExperimental(ExperimentalTypeInference::class)
package kotlin.sequences
import kotlin.*
import kotlin.coroutines.*
import kotlin.coroutines.intrinsics.*
import kotlin.experimental.ExperimentalTypeInference
/**
* Builds a [Sequence] lazily yielding values one by one.
@@ -21,12 +23,12 @@ import kotlin.coroutines.intrinsics.*
* @sample samples.collections.Sequences.Building.buildFibonacciSequence
*/
@SinceKotlin("1.3")
public fun <T> sequence(block: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(block) }
public fun <T> sequence(@BuilderInference block: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(block) }
@SinceKotlin("1.3")
@Deprecated("Use 'sequence { }' function instead.", ReplaceWith("sequence(builderAction)"), level = DeprecationLevel.ERROR)
@kotlin.internal.InlineOnly
public inline fun <T> buildSequence(noinline builderAction: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(builderAction) }
public inline fun <T> buildSequence(@BuilderInference noinline builderAction: suspend SequenceScope<T>.() -> Unit): Sequence<T> = Sequence { iterator(builderAction) }
/**
* Builds an [Iterator] lazily yielding values one by one.
@@ -35,7 +37,7 @@ public inline fun <T> buildSequence(noinline builderAction: suspend SequenceScop
* @sample samples.collections.Iterables.Building.iterable
*/
@SinceKotlin("1.3")
public fun <T> iterator(block: suspend SequenceScope<T>.() -> Unit): Iterator<T> {
public fun <T> iterator(@BuilderInference block: suspend SequenceScope<T>.() -> Unit): Iterator<T> {
val iterator = SequenceBuilderIterator<T>()
iterator.nextStep = block.createCoroutineUnintercepted(receiver = iterator, completion = iterator)
return iterator
@@ -44,7 +46,7 @@ public fun <T> iterator(block: suspend SequenceScope<T>.() -> Unit): Iterator<T>
@SinceKotlin("1.3")
@Deprecated("Use 'iterator { }' function instead.", ReplaceWith("iterator(builderAction)"), level = DeprecationLevel.ERROR)
@kotlin.internal.InlineOnly
public inline fun <T> buildIterator(noinline builderAction: suspend SequenceScope<T>.() -> Unit): Iterator<T> = iterator(builderAction)
public inline fun <T> buildIterator(@BuilderInference noinline builderAction: suspend SequenceScope<T>.() -> Unit): Iterator<T> = iterator(builderAction)
/**
* The scope for yielding values of a [Sequence] or an [Iterator], provides [yield] and [yieldAll] suspension functions.
+1
View File
@@ -184,6 +184,7 @@ compileCoroutinesKotlin2Js {
sourceMapPrefix = "./"
freeCompilerArgs += [
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
"-Xuse-experimental=kotlin.Experimental",
"-XXLanguage:-ReleaseCoroutines"
]
}
+1
View File
@@ -192,6 +192,7 @@ compileCoroutinesKotlin {
"-Xallow-result-return-type",
"-Xmultifile-parts-inherit",
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts",
"-Xuse-experimental=kotlin.Experimental",
"-XXLanguage:-ReleaseCoroutines",
"-module-name", "kotlin-stdlib-coroutines"
]