From 6a1ad3a27937f919f8b48df064eee19a59a735c4 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Sat, 14 Jan 2017 13:12:21 +0300 Subject: [PATCH] Get rid of unnecessary additional declarations in tests --- .../codegen/box/coroutines/asyncIterator.kt | 2 +- .../box/coroutines/beginWithException.kt | 2 +- .../coroutines/controlFlow/throwFromCatch.kt | 2 +- .../controlFlow/throwInTryWithHandleResult.kt | 2 +- .../codegen/box/coroutines/dispatchResume.kt | 28 +++++++++++++ .../codegen/box/coroutines/generate.kt | 2 +- .../inlineFunctionWithOptionalParam.kt | 2 +- .../box/coroutines/simpleWithHandleResult.kt | 2 +- .../dispatchResume.kt | 28 +++++++++++++ .../unitTypeReturn/coroutineNonLocalReturn.kt | 2 +- .../unitTypeReturn/coroutineReturn.kt | 2 +- .../coroutinesBinary.kt | 2 + .../kotlin/test/KotlinTestUtils.java | 41 ++----------------- 13 files changed, 70 insertions(+), 47 deletions(-) diff --git a/compiler/testData/codegen/box/coroutines/asyncIterator.kt b/compiler/testData/codegen/box/coroutines/asyncIterator.kt index d23f8d8990b..0d04fb781a7 100644 --- a/compiler/testData/codegen/box/coroutines/asyncIterator.kt +++ b/compiler/testData/codegen/box/coroutines/asyncIterator.kt @@ -34,7 +34,7 @@ class AsyncGeneratorIterator: AsyncIterator, AsyncGenerator, Continuati var computesNext = false var computeContinuation: Continuation<*>? = null - override val context = EmptyContext + override val context = EmptyCoroutineContext suspend fun computeHasNext(): Boolean = suspendCoroutineOrReturn { c -> computesNext = false diff --git a/compiler/testData/codegen/box/coroutines/beginWithException.kt b/compiler/testData/codegen/box/coroutines/beginWithException.kt index 155437d74dc..3e8464cfa38 100644 --- a/compiler/testData/codegen/box/coroutines/beginWithException.kt +++ b/compiler/testData/codegen/box/coroutines/beginWithException.kt @@ -9,7 +9,7 @@ fun builder(c: suspend () -> Unit) { var exception: Throwable? = null c.createCoroutine(object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(data: Unit) { } diff --git a/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt b/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt index af31c7546fa..a58fac93052 100644 --- a/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt +++ b/compiler/testData/codegen/box/coroutines/controlFlow/throwFromCatch.kt @@ -24,7 +24,7 @@ class Controller { fun builder(c: suspend Controller.() -> Unit): String { val controller = Controller() c.startCoroutine(controller, object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(data: Unit) { diff --git a/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt b/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt index 71ab855033a..693cc4aa85f 100644 --- a/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt +++ b/compiler/testData/codegen/box/coroutines/controlFlow/throwInTryWithHandleResult.kt @@ -17,7 +17,7 @@ class Controller { fun builder(c: suspend Controller.() -> Unit): String { val controller = Controller() c.startCoroutine(controller, object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(data: Unit) {} diff --git a/compiler/testData/codegen/box/coroutines/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/dispatchResume.kt index 5d94e96cc34..87e851f6e6c 100644 --- a/compiler/testData/codegen/box/coroutines/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/dispatchResume.kt @@ -21,6 +21,34 @@ class Controller { } } +abstract class ContinuationDispatcher : ContinuationInterceptor { + override val contextKey: CoroutineContextKey<*> = ContinuationInterceptor + abstract fun dispatchResume(value: T, continuation: Continuation): Boolean + abstract fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean + override fun interceptContinuation(continuation: Continuation): Continuation = DispatchedContinuation(this, continuation) + override operator fun get(key: CoroutineContextKey): E? = if (this.contextKey == key) this as E else null + override fun fold(initial: R, operation: (R, CoroutineContextElement) -> R): R = operation(initial, this) + override operator fun plus(context: CoroutineContext): CoroutineContext = this + override fun minusKey(key: CoroutineContextKey<*>): CoroutineContext = if (this.contextKey == key) EmptyCoroutineContext else this +} + +private class DispatchedContinuation( + val dispatcher: ContinuationDispatcher, + val continuation: Continuation +): Continuation { + override val context: CoroutineContext = continuation.context + + override fun resume(value: T) { + if (!dispatcher.dispatchResume(value, continuation)) + continuation.resume(value) + } + + override fun resumeWithException(exception: Throwable) { + if (!dispatcher.dispatchResumeWithException(exception, continuation)) + continuation.resumeWithException(exception) + } +} + fun test(c: suspend Controller.() -> Unit): String { val controller = Controller() c.startCoroutine(controller, EmptyContinuation(object: ContinuationDispatcher() { diff --git a/compiler/testData/codegen/box/coroutines/generate.kt b/compiler/testData/codegen/box/coroutines/generate.kt index 42686c76af3..d10f11bb533 100644 --- a/compiler/testData/codegen/box/coroutines/generate.kt +++ b/compiler/testData/codegen/box/coroutines/generate.kt @@ -39,7 +39,7 @@ class GeneratedSequence(private val block: suspend Generator.() -> Uni class GeneratedIterator(block: suspend Generator.() -> Unit) : AbstractIterator(), Generator { private var nextStep: Continuation = block.createCoroutine(this, object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(data: Unit) { done() diff --git a/compiler/testData/codegen/box/coroutines/multiModule/inlineFunctionWithOptionalParam.kt b/compiler/testData/codegen/box/coroutines/multiModule/inlineFunctionWithOptionalParam.kt index 5aeb3ece300..a0c179a9304 100644 --- a/compiler/testData/codegen/box/coroutines/multiModule/inlineFunctionWithOptionalParam.kt +++ b/compiler/testData/codegen/box/coroutines/multiModule/inlineFunctionWithOptionalParam.kt @@ -15,7 +15,7 @@ var result = "" fun builder(c: suspend () -> Unit) { c.startCoroutine(object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(value: Unit) { } override fun resumeWithException(exception: Throwable) { diff --git a/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt b/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt index b2d0c8e49f7..a51f4eac45c 100644 --- a/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt +++ b/compiler/testData/codegen/box/coroutines/simpleWithHandleResult.kt @@ -12,7 +12,7 @@ fun builder(c: suspend () -> Int): Int { var res = 0 c.createCoroutine(object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(data: Int) { res = data diff --git a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt index 391b58840ef..ccfc25a6cad 100644 --- a/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt +++ b/compiler/testData/codegen/box/coroutines/suspendFunctionAsCoroutine/dispatchResume.kt @@ -21,6 +21,34 @@ class Controller { } } +abstract class ContinuationDispatcher : ContinuationInterceptor { + override val contextKey: CoroutineContextKey<*> = ContinuationInterceptor + abstract fun dispatchResume(value: T, continuation: Continuation): Boolean + abstract fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean + override fun interceptContinuation(continuation: Continuation): Continuation = DispatchedContinuation(this, continuation) + override operator fun get(key: CoroutineContextKey): E? = if (this.contextKey == key) this as E else null + override fun fold(initial: R, operation: (R, CoroutineContextElement) -> R): R = operation(initial, this) + override operator fun plus(context: CoroutineContext): CoroutineContext = this + override fun minusKey(key: CoroutineContextKey<*>): CoroutineContext = if (this.contextKey == key) EmptyCoroutineContext else this +} + +private class DispatchedContinuation( + val dispatcher: ContinuationDispatcher, + val continuation: Continuation +): Continuation { + override val context: CoroutineContext = continuation.context + + override fun resume(value: T) { + if (!dispatcher.dispatchResume(value, continuation)) + continuation.resume(value) + } + + override fun resumeWithException(exception: Throwable) { + if (!dispatcher.dispatchResumeWithException(exception, continuation)) + continuation.resumeWithException(exception) + } +} + fun test(c: suspend Controller.() -> Unit): String { val controller = Controller() c.startCoroutine(controller, EmptyContinuation(object: ContinuationDispatcher() { diff --git a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt index 277c7f8ef34..44bf6ebed67 100644 --- a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt +++ b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineNonLocalReturn.kt @@ -11,7 +11,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> fun builder(c: suspend () -> Unit) { var wasResumeCalled = false c.startCoroutine(object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(value: Unit) { wasResumeCalled = true diff --git a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt index 1c661d31b15..0a0753610a3 100644 --- a/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt +++ b/compiler/testData/codegen/box/coroutines/unitTypeReturn/coroutineReturn.kt @@ -11,7 +11,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x -> fun builder(c: suspend () -> Unit) { var wasResumeCalled = false c.startCoroutine(object : Continuation { - override val context = EmptyContext + override val context = EmptyCoroutineContext override fun resume(value: Unit) { wasResumeCalled = true diff --git a/compiler/testData/compileKotlinAgainstKotlin/coroutinesBinary.kt b/compiler/testData/compileKotlinAgainstKotlin/coroutinesBinary.kt index a0a177b3e23..77170305c0b 100644 --- a/compiler/testData/compileKotlinAgainstKotlin/coroutinesBinary.kt +++ b/compiler/testData/compileKotlinAgainstKotlin/coroutinesBinary.kt @@ -1,4 +1,5 @@ // FILE: A.kt +// WITH_RUNTIME package a import kotlin.coroutines.* @@ -13,6 +14,7 @@ class Controller { fun builder(c: suspend Controller.() -> Unit) { c.startCoroutine(Controller(), object : Continuation { + override val context: CoroutineContext = EmptyCoroutineContext override fun resume(value: Unit) {} override fun resumeWithException(exception: Throwable) {} diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java index 5db4c7ca28d..f3a97b71339 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java @@ -649,7 +649,7 @@ public class KotlinTestUtils { "CoroutineUtil.kt", "import kotlin.coroutines.*\n" + "fun handleResultContinuation(x: (T) -> Unit): Continuation = object: Continuation {\n" + - " override val context = EmptyContext\n" + + " override val context = EmptyCoroutineContext\n" + " override fun resumeWithException(exception: Throwable) {\n" + " throw exception\n" + " }\n" + @@ -658,7 +658,7 @@ public class KotlinTestUtils { "}\n" + "\n" + "fun handleExceptionContinuation(x: (Throwable) -> Unit): Continuation = object: Continuation {\n" + - " override val context = EmptyContext\n" + + " override val context = EmptyCoroutineContext\n" + " override fun resumeWithException(exception: Throwable) {\n" + " x(exception)\n" + " }\n" + @@ -666,45 +666,10 @@ public class KotlinTestUtils { " override fun resume(data: Any?) { }\n" + "}\n" + "\n" + - "object EmptyContext : CoroutineContext {\n" + - " override fun get(key: CoroutineContextKey): E? = null\n" + - " override fun fold(initial: R, operation: (R, CoroutineContextElement) -> R): R = initial\n" + - " override fun plus(context: CoroutineContext): CoroutineContext = context\n" + - " override fun minusKey(key: CoroutineContextKey<*>): CoroutineContext = this\n" + - "}\n" + - "\n" + - "open class EmptyContinuation(override val context: CoroutineContext = EmptyContext) : Continuation {\n" + + "open class EmptyContinuation(override val context: CoroutineContext = EmptyCoroutineContext) : Continuation {\n" + " companion object : EmptyContinuation()\n" + " override fun resume(data: Any?) {}\n" + " override fun resumeWithException(exception: Throwable) { throw exception }\n" + - "}\n" + - "\n" + - "abstract class ContinuationDispatcher : ContinuationInterceptor {\n" + - " override val contextKey: CoroutineContextKey<*> = ContinuationInterceptor\n" + - " abstract fun dispatchResume(value: T, continuation: Continuation): Boolean\n" + - " abstract fun dispatchResumeWithException(exception: Throwable, continuation: Continuation<*>): Boolean\n" + - " override fun interceptContinuation(continuation: Continuation): Continuation = DispatchedContinuation(this, continuation)\n" + - " override operator fun get(key: CoroutineContextKey): E? = if (this.contextKey == key) this as E else null\n" + - " override fun fold(initial: R, operation: (R, CoroutineContextElement) -> R): R = operation(initial, this)\n" + - " override operator fun plus(context: CoroutineContext): CoroutineContext = this\n" + - " override fun minusKey(key: CoroutineContextKey<*>): CoroutineContext = if (this.contextKey == key) EmptyContext else this\n" + - "}\n" + - "\n" + - "private class DispatchedContinuation(\n" + - " val dispatcher: ContinuationDispatcher,\n" + - " val continuation: Continuation\n" + - "): Continuation {\n" + - " override val context: CoroutineContext = continuation.context\n" + - "\n" + - " override fun resume(value: T) {\n" + - " if (!dispatcher.dispatchResume(value, continuation))\n" + - " continuation.resume(value)\n" + - " }\n" + - "\n" + - " override fun resumeWithException(exception: Throwable) {\n" + - " if (!dispatcher.dispatchResumeWithException(exception, continuation))\n" + - " continuation.resumeWithException(exception)\n" + - " }\n" + "}", directives ));