From d7f2eeb6e80565fdbf8cd125bb744ec0d6aabb2c Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 18 Sep 2018 18:15:34 +0300 Subject: [PATCH] Add `BuildInference` annotation onto stdlib coroutine builders --- libraries/stdlib/common/build.gradle | 1 + .../kotlin/coroutines/experimental/SequenceBuilder.kt | 6 ++++-- .../coroutines/src/kotlin/sequences/SequenceBuilder.kt | 10 ++++++---- libraries/stdlib/js/build.gradle | 1 + libraries/stdlib/jvm/build.gradle | 1 + 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/libraries/stdlib/common/build.gradle b/libraries/stdlib/common/build.gradle index 6e35e24c4ee..323bb487201 100644 --- a/libraries/stdlib/common/build.gradle +++ b/libraries/stdlib/common/build.gradle @@ -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" diff --git a/libraries/stdlib/coroutines-experimental/src/kotlin/coroutines/experimental/SequenceBuilder.kt b/libraries/stdlib/coroutines-experimental/src/kotlin/coroutines/experimental/SequenceBuilder.kt index c7982fafa7c..e672c893b0f 100644 --- a/libraries/stdlib/coroutines-experimental/src/kotlin/coroutines/experimental/SequenceBuilder.kt +++ b/libraries/stdlib/coroutines-experimental/src/kotlin/coroutines/experimental/SequenceBuilder.kt @@ -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 buildSequence(builderAction: suspend SequenceBuilder.() -> Unit): Sequence = Sequence { buildIterator(builderAction) } +public fun buildSequence(@BuilderInference builderAction: suspend SequenceBuilder.() -> Unit): Sequence = Sequence { buildIterator(builderAction) } /** * Builds an [Iterator] lazily yielding values one by one. @@ -29,7 +31,7 @@ public fun buildSequence(builderAction: suspend SequenceBuilder.() -> Uni * @sample samples.collections.Iterables.Building.iterable */ @SinceKotlin("1.1") -public fun buildIterator(builderAction: suspend SequenceBuilder.() -> Unit): Iterator { +public fun buildIterator(@BuilderInference builderAction: suspend SequenceBuilder.() -> Unit): Iterator { val iterator = SequenceBuilderIterator() iterator.nextStep = builderAction.createCoroutineUnchecked(receiver = iterator, completion = iterator) return iterator diff --git a/libraries/stdlib/coroutines/src/kotlin/sequences/SequenceBuilder.kt b/libraries/stdlib/coroutines/src/kotlin/sequences/SequenceBuilder.kt index 0822820408f..2512ac9e3a6 100644 --- a/libraries/stdlib/coroutines/src/kotlin/sequences/SequenceBuilder.kt +++ b/libraries/stdlib/coroutines/src/kotlin/sequences/SequenceBuilder.kt @@ -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 sequence(block: suspend SequenceScope.() -> Unit): Sequence = Sequence { iterator(block) } +public fun sequence(@BuilderInference block: suspend SequenceScope.() -> Unit): Sequence = Sequence { iterator(block) } @SinceKotlin("1.3") @Deprecated("Use 'sequence { }' function instead.", ReplaceWith("sequence(builderAction)"), level = DeprecationLevel.ERROR) @kotlin.internal.InlineOnly -public inline fun buildSequence(noinline builderAction: suspend SequenceScope.() -> Unit): Sequence = Sequence { iterator(builderAction) } +public inline fun buildSequence(@BuilderInference noinline builderAction: suspend SequenceScope.() -> Unit): Sequence = Sequence { iterator(builderAction) } /** * Builds an [Iterator] lazily yielding values one by one. @@ -35,7 +37,7 @@ public inline fun buildSequence(noinline builderAction: suspend SequenceScop * @sample samples.collections.Iterables.Building.iterable */ @SinceKotlin("1.3") -public fun iterator(block: suspend SequenceScope.() -> Unit): Iterator { +public fun iterator(@BuilderInference block: suspend SequenceScope.() -> Unit): Iterator { val iterator = SequenceBuilderIterator() iterator.nextStep = block.createCoroutineUnintercepted(receiver = iterator, completion = iterator) return iterator @@ -44,7 +46,7 @@ public fun iterator(block: suspend SequenceScope.() -> Unit): Iterator @SinceKotlin("1.3") @Deprecated("Use 'iterator { }' function instead.", ReplaceWith("iterator(builderAction)"), level = DeprecationLevel.ERROR) @kotlin.internal.InlineOnly -public inline fun buildIterator(noinline builderAction: suspend SequenceScope.() -> Unit): Iterator = iterator(builderAction) +public inline fun buildIterator(@BuilderInference noinline builderAction: suspend SequenceScope.() -> Unit): Iterator = iterator(builderAction) /** * The scope for yielding values of a [Sequence] or an [Iterator], provides [yield] and [yieldAll] suspension functions. diff --git a/libraries/stdlib/js/build.gradle b/libraries/stdlib/js/build.gradle index 86a54f1419d..ac3590ffd86 100644 --- a/libraries/stdlib/js/build.gradle +++ b/libraries/stdlib/js/build.gradle @@ -184,6 +184,7 @@ compileCoroutinesKotlin2Js { sourceMapPrefix = "./" freeCompilerArgs += [ "-Xuse-experimental=kotlin.contracts.ExperimentalContracts", + "-Xuse-experimental=kotlin.Experimental", "-XXLanguage:-ReleaseCoroutines" ] } diff --git a/libraries/stdlib/jvm/build.gradle b/libraries/stdlib/jvm/build.gradle index a9d2cbc18a1..4b538060567 100644 --- a/libraries/stdlib/jvm/build.gradle +++ b/libraries/stdlib/jvm/build.gradle @@ -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" ]