Make Ref classes for shared vars Serializable
#KT-14566 Fixed
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
import java.io.*
|
||||
|
||||
fun box(): String {
|
||||
var o = ""
|
||||
var b = 0.toByte()
|
||||
var d = 0.0
|
||||
var f = 0.0f
|
||||
var i = 0
|
||||
var j = 0L
|
||||
var s = 0.toShort()
|
||||
var c = '0'
|
||||
var z = false
|
||||
|
||||
val lambda = fun(): String {
|
||||
o = "OK"
|
||||
b++; d++; f++; i++; j++; s++; c++
|
||||
z = true
|
||||
return o
|
||||
}
|
||||
|
||||
val baos = ByteArrayOutputStream()
|
||||
val oos = ObjectOutputStream(baos)
|
||||
oos.writeObject(lambda)
|
||||
oos.close()
|
||||
|
||||
val bais = ByteArrayInputStream(baos.toByteArray())
|
||||
val ois = ObjectInputStream(bais)
|
||||
val result = ois.readObject() as () -> String
|
||||
ois.close()
|
||||
|
||||
return result()
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
@kotlin.Metadata
|
||||
public final class RefsAreSerializableKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
}
|
||||
+6
@@ -3617,6 +3617,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("refsAreSerializable.kt")
|
||||
public void testRefsAreSerializable() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/refsAreSerializable.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simplestClosure.kt")
|
||||
public void testSimplestClosure() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
||||
|
||||
@@ -3617,6 +3617,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("refsAreSerializable.kt")
|
||||
public void testRefsAreSerializable() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/refsAreSerializable.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simplestClosure.kt")
|
||||
public void testSimplestClosure() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
package kotlin.jvm.internal;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Ref {
|
||||
private Ref() {}
|
||||
|
||||
public static final class ObjectRef<T> {
|
||||
public static final class ObjectRef<T> implements Serializable {
|
||||
public T element;
|
||||
|
||||
@Override
|
||||
@@ -28,7 +30,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class ByteRef {
|
||||
public static final class ByteRef implements Serializable {
|
||||
public byte element;
|
||||
|
||||
@Override
|
||||
@@ -37,7 +39,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class ShortRef {
|
||||
public static final class ShortRef implements Serializable {
|
||||
public short element;
|
||||
|
||||
@Override
|
||||
@@ -46,7 +48,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class IntRef {
|
||||
public static final class IntRef implements Serializable {
|
||||
public int element;
|
||||
|
||||
@Override
|
||||
@@ -55,7 +57,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class LongRef {
|
||||
public static final class LongRef implements Serializable {
|
||||
public long element;
|
||||
|
||||
@Override
|
||||
@@ -64,7 +66,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class FloatRef {
|
||||
public static final class FloatRef implements Serializable {
|
||||
public float element;
|
||||
|
||||
@Override
|
||||
@@ -73,7 +75,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class DoubleRef {
|
||||
public static final class DoubleRef implements Serializable {
|
||||
public double element;
|
||||
|
||||
@Override
|
||||
@@ -82,7 +84,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class CharRef {
|
||||
public static final class CharRef implements Serializable {
|
||||
public char element;
|
||||
|
||||
@Override
|
||||
@@ -91,7 +93,7 @@ public class Ref {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class BooleanRef {
|
||||
public static final class BooleanRef implements Serializable {
|
||||
public boolean element;
|
||||
|
||||
@Override
|
||||
|
||||
+12
@@ -4284,6 +4284,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("refsAreSerializable.kt")
|
||||
public void testRefsAreSerializable() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/refsAreSerializable.kt");
|
||||
try {
|
||||
doTest(fileName);
|
||||
}
|
||||
catch (Throwable ignore) {
|
||||
return;
|
||||
}
|
||||
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
||||
}
|
||||
|
||||
@TestMetadata("simplestClosure.kt")
|
||||
public void testSimplestClosure() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
||||
|
||||
+9
-9
@@ -759,55 +759,55 @@ public class kotlin/jvm/internal/PropertyReference2Impl : kotlin/jvm/internal/Pr
|
||||
public class kotlin/jvm/internal/Ref {
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$BooleanRef {
|
||||
public final class kotlin/jvm/internal/Ref$BooleanRef : java/io/Serializable {
|
||||
public field element Z
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ByteRef {
|
||||
public final class kotlin/jvm/internal/Ref$ByteRef : java/io/Serializable {
|
||||
public field element B
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$CharRef {
|
||||
public final class kotlin/jvm/internal/Ref$CharRef : java/io/Serializable {
|
||||
public field element C
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$DoubleRef {
|
||||
public final class kotlin/jvm/internal/Ref$DoubleRef : java/io/Serializable {
|
||||
public field element D
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$FloatRef {
|
||||
public final class kotlin/jvm/internal/Ref$FloatRef : java/io/Serializable {
|
||||
public field element F
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$IntRef {
|
||||
public final class kotlin/jvm/internal/Ref$IntRef : java/io/Serializable {
|
||||
public field element I
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$LongRef {
|
||||
public final class kotlin/jvm/internal/Ref$LongRef : java/io/Serializable {
|
||||
public field element J
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ObjectRef {
|
||||
public final class kotlin/jvm/internal/Ref$ObjectRef : java/io/Serializable {
|
||||
public field element Ljava/lang/Object;
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ShortRef {
|
||||
public final class kotlin/jvm/internal/Ref$ShortRef : java/io/Serializable {
|
||||
public field element S
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
|
||||
+9
-9
@@ -2754,55 +2754,55 @@ public class kotlin/jvm/internal/PropertyReference2Impl : kotlin/jvm/internal/Pr
|
||||
public class kotlin/jvm/internal/Ref {
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$BooleanRef {
|
||||
public final class kotlin/jvm/internal/Ref$BooleanRef : java/io/Serializable {
|
||||
public field element Z
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ByteRef {
|
||||
public final class kotlin/jvm/internal/Ref$ByteRef : java/io/Serializable {
|
||||
public field element B
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$CharRef {
|
||||
public final class kotlin/jvm/internal/Ref$CharRef : java/io/Serializable {
|
||||
public field element C
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$DoubleRef {
|
||||
public final class kotlin/jvm/internal/Ref$DoubleRef : java/io/Serializable {
|
||||
public field element D
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$FloatRef {
|
||||
public final class kotlin/jvm/internal/Ref$FloatRef : java/io/Serializable {
|
||||
public field element F
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$IntRef {
|
||||
public final class kotlin/jvm/internal/Ref$IntRef : java/io/Serializable {
|
||||
public field element I
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$LongRef {
|
||||
public final class kotlin/jvm/internal/Ref$LongRef : java/io/Serializable {
|
||||
public field element J
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ObjectRef {
|
||||
public final class kotlin/jvm/internal/Ref$ObjectRef : java/io/Serializable {
|
||||
public field element Ljava/lang/Object;
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/jvm/internal/Ref$ShortRef {
|
||||
public final class kotlin/jvm/internal/Ref$ShortRef : java/io/Serializable {
|
||||
public field element S
|
||||
public fun <init> ()V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
|
||||
Reference in New Issue
Block a user