JVM_IR KT-46562 don't use LambdaMetafactory for Serializable SAMs

TODO support serializable lambdas creation with LambdaMetafactory
This commit is contained in:
Dmitry Petrov
2021-05-10 14:52:46 +03:00
parent bdfc879f00
commit ac0aaff611
8 changed files with 143 additions and 1 deletions
@@ -0,0 +1,31 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// FILE: serializableSam1.kt
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
fun roundtrip(r: Ok): String {
val output = ByteArrayOutputStream()
ObjectOutputStream(output).writeObject(r)
val input = ByteArrayInputStream(output.toByteArray())
val rr = ObjectInputStream(input).readObject() as Ok
return rr.ok()
}
fun box() = roundtrip { "OK" }
// FILE: Ok.java
import java.io.Serializable;
public interface Ok extends Serializable {
String ok();
}
@@ -0,0 +1,37 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// SAM_CONVERSIONS: INDY
// FULL_JDK
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory
// FILE: serializableSam2.kt
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
fun roundtrip(r: Ok): String {
val output = ByteArrayOutputStream()
ObjectOutputStream(output).writeObject(r)
val input = ByteArrayInputStream(output.toByteArray())
val rr = ObjectInputStream(input).readObject() as Ok
return rr.ok()
}
fun box() = roundtrip { "OK" }
// FILE: Ok.java
public interface Ok extends Base, Marker {}
// FILE: Base.java
public interface Base {
String ok();
}
// FILE: Marker.java
import java.io.Serializable;
public interface Marker extends Serializable {}