Fix generic signature for KSuspendFunction types in bytecode

#KT-27560 Fixed
This commit is contained in:
Alexander Udalov
2018-11-07 18:09:25 +01:00
parent 7b0c7ec400
commit a2612c1eae
3 changed files with 46 additions and 1 deletions
@@ -0,0 +1,39 @@
interface I
abstract class AbstractTest {
abstract fun normal(): suspend (String) -> Unit
abstract fun extension(): suspend Double.() -> Double
abstract fun bigArity(): suspend (I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I) -> Unit
}
class Test : AbstractTest() {
override fun normal() = ::suspendNormal
override fun extension() = Double::suspendExtension
override fun bigArity() = this::suspendBigArity
private suspend fun suspendNormal(s: String) {}
private suspend fun suspendBigArity(
p01: I, p02: I, p03: I, p04: I, p05: I, p06: I, p07: I, p08: I, p09: I, p10: I,
p11: I, p12: I, p13: I, p14: I, p15: I, p16: I, p17: I, p18: I, p19: I, p20: I,
p21: I, p22: I, p23: I, p24: I, p25: I, p26: I, p27: I, p28: I, p29: I, p30: I
) {}
}
private suspend fun Double.suspendExtension(): Double = this
// method: Test::normal
// jvm signature: ()Lkotlin/reflect/KFunction;
// generic signature: ()Lkotlin/reflect/KFunction<Lkotlin/Unit;>;
// method: Test::extension
// jvm signature: ()Lkotlin/reflect/KFunction;
// generic signature: ()Lkotlin/reflect/KFunction<Ljava/lang/Double;>;
// method: Test::bigArity
// jvm signature: ()Lkotlin/reflect/KFunction;
// generic signature: ()Lkotlin/reflect/KFunction<Lkotlin/Unit;>;