JVM_IR KT-46562 don't use LambdaMetafactory for Serializable SAMs
TODO support serializable lambdas creation with LambdaMetafactory
This commit is contained in:
@@ -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 {}
|
||||
Reference in New Issue
Block a user