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);
|
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")
|
@TestMetadata("suspendOverride.kt")
|
||||||
public void testSuspendOverride() throws Exception {
|
public void testSuspendOverride() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/dumpDeclarations/suspendOverride.kt");
|
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.*
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor
|
import org.jetbrains.kotlin.types.ErrorUtils.UninferredParameterTypeConstructor
|
||||||
import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE
|
import org.jetbrains.kotlin.types.TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE
|
||||||
import java.lang.UnsupportedOperationException
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
internal class DescriptorRendererImpl(
|
internal class DescriptorRendererImpl(
|
||||||
@@ -1048,8 +1047,8 @@ internal class DescriptorRendererImpl(
|
|||||||
renderFunction(descriptor, builder)
|
renderFunction(descriptor, builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitReceiverParameterDescriptor(descriptor: ReceiverParameterDescriptor, data: StringBuilder) {
|
override fun visitReceiverParameterDescriptor(descriptor: ReceiverParameterDescriptor, builder: StringBuilder) {
|
||||||
throw UnsupportedOperationException("Don't render receiver parameters")
|
builder.append(descriptor.name) // renders <this>
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitConstructorDescriptor(constructorDescriptor: ConstructorDescriptor, builder: StringBuilder) {
|
override fun visitConstructorDescriptor(constructorDescriptor: ConstructorDescriptor, builder: StringBuilder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user