diff --git a/compiler/testData/codegen/dumpDeclarations/suspendLambda.json b/compiler/testData/codegen/dumpDeclarations/suspendLambda.json new file mode 100644 index 00000000000..13f21091d9e --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/suspendLambda.json @@ -0,0 +1,23 @@ +[ + { + "declaration": "final suspend fun kotlin.Any.(): kotlin.Unit defined in invokeCoroutineBuilder", + "visibility": "local", + "class": "SuspendLambdaKt$invokeCoroutineBuilder$1", + "members": [ + {"visibility": "local", "declaration": "final fun kotlin.Any.(`$continuation`: kotlin.coroutines.experimental.Continuation): kotlin.Any?", "name": "invoke", "desc": "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"}, + {"visibility": "local", "declaration": "", "name": "p$", "desc": "Ljava/lang/Object;"}, + {"name": "doResume", "desc": "(Ljava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object;"}, + {"visibility": "local", "declaration": "final fun kotlin.Any.(`$continuation`: kotlin.coroutines.experimental.Continuation): kotlin.Any?", "name": "", "desc": "(Lkotlin/coroutines/experimental/Continuation;)V"}, + {"name": "create", "desc": "(Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Lkotlin/coroutines/experimental/Continuation;"}, + {"name": "invoke", "desc": "(Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object;"} + ] + }, + { + "declaration": "package-fragment", + "class": "SuspendLambdaKt", + "members": [ + {"visibility": "public", "declaration": "fun invokeCoroutineBuilder(): kotlin.Unit", "name": "invokeCoroutineBuilder", "desc": "()V"}, + {"visibility": "public", "declaration": "fun buildCoroutine(builderAction: suspend kotlin.Any.() -> kotlin.Unit): kotlin.Unit", "name": "buildCoroutine", "desc": "(Lkotlin/jvm/functions/Function2;)V"} + ] + } +] diff --git a/compiler/testData/codegen/dumpDeclarations/suspendLambda.kt b/compiler/testData/codegen/dumpDeclarations/suspendLambda.kt new file mode 100644 index 00000000000..bb4136ba1a5 --- /dev/null +++ b/compiler/testData/codegen/dumpDeclarations/suspendLambda.kt @@ -0,0 +1,8 @@ +public fun invokeCoroutineBuilder() { + return buildCoroutine { + } +} + +public fun buildCoroutine(builderAction: suspend Any.() -> Unit) { + +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java index 2fd4fce6254..eca9d996301 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/DumpDeclarationsTestGenerated.java @@ -72,6 +72,12 @@ public class DumpDeclarationsTestGenerated extends AbstractDumpDeclarationsTest doTest(fileName); } + @TestMetadata("suspendLambda.kt") + public void testSuspendLambda() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/suspendLambda.kt"); + doTest(fileName); + } + @TestMetadata("suspendOverride.kt") public void testSuspendOverride() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/suspendOverride.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index bbdccb3bf22..14371cc109d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.serialization.deserialization.NotFoundClasses import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE -import java.lang.UnsupportedOperationException import java.util.* internal class DescriptorRendererImpl( @@ -1048,8 +1047,8 @@ internal class DescriptorRendererImpl( renderFunction(descriptor, builder) } - override fun visitReceiverParameterDescriptor(descriptor: ReceiverParameterDescriptor, data: StringBuilder) { - throw UnsupportedOperationException("Don't render receiver parameters") + override fun visitReceiverParameterDescriptor(descriptor: ReceiverParameterDescriptor, builder: StringBuilder) { + builder.append(descriptor.name) // renders } override fun visitConstructorDescriptor(constructorDescriptor: ConstructorDescriptor, builder: StringBuilder) {