Support rendering receiver parameters
Otherwise generated coroutine implementation class could not be rendered since one of its members corresponds to receiver parameter descriptor.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
[
|
||||
{
|
||||
"declaration": "final suspend fun kotlin.Any.<anonymous>(): kotlin.Unit defined in invokeCoroutineBuilder",
|
||||
"visibility": "local",
|
||||
"class": "SuspendLambdaKt$invokeCoroutineBuilder$1",
|
||||
"members": [
|
||||
{"visibility": "local", "declaration": "final fun kotlin.Any.<anonymous>(`$continuation`: kotlin.coroutines.experimental.Continuation<kotlin.Unit>): kotlin.Any?", "name": "invoke", "desc": "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"},
|
||||
{"visibility": "local", "declaration": "<this>", "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.<anonymous>(`$continuation`: kotlin.coroutines.experimental.Continuation<kotlin.Unit>): kotlin.Any?", "name": "<init>", "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"}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,8 @@
|
||||
public fun invokeCoroutineBuilder() {
|
||||
return buildCoroutine {
|
||||
}
|
||||
}
|
||||
|
||||
public fun buildCoroutine(builderAction: suspend Any.() -> Unit) {
|
||||
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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 <this>
|
||||
}
|
||||
|
||||
override fun visitConstructorDescriptor(constructorDescriptor: ConstructorDescriptor, builder: StringBuilder) {
|
||||
|
||||
Reference in New Issue
Block a user