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);
|
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")
|
@TestMetadata("simplestClosure.kt")
|
||||||
public void testSimplestClosure() throws Exception {
|
public void testSimplestClosure() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
||||||
|
|||||||
@@ -3617,6 +3617,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("simplestClosure.kt")
|
||||||
public void testSimplestClosure() throws Exception {
|
public void testSimplestClosure() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
||||||
|
|||||||
@@ -16,10 +16,12 @@
|
|||||||
|
|
||||||
package kotlin.jvm.internal;
|
package kotlin.jvm.internal;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
public class Ref {
|
public class Ref {
|
||||||
private Ref() {}
|
private Ref() {}
|
||||||
|
|
||||||
public static final class ObjectRef<T> {
|
public static final class ObjectRef<T> implements Serializable {
|
||||||
public T element;
|
public T element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -28,7 +30,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class ByteRef {
|
public static final class ByteRef implements Serializable {
|
||||||
public byte element;
|
public byte element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -37,7 +39,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class ShortRef {
|
public static final class ShortRef implements Serializable {
|
||||||
public short element;
|
public short element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -46,7 +48,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class IntRef {
|
public static final class IntRef implements Serializable {
|
||||||
public int element;
|
public int element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -55,7 +57,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class LongRef {
|
public static final class LongRef implements Serializable {
|
||||||
public long element;
|
public long element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +66,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class FloatRef {
|
public static final class FloatRef implements Serializable {
|
||||||
public float element;
|
public float element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -73,7 +75,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class DoubleRef {
|
public static final class DoubleRef implements Serializable {
|
||||||
public double element;
|
public double element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,7 +84,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class CharRef {
|
public static final class CharRef implements Serializable {
|
||||||
public char element;
|
public char element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -91,7 +93,7 @@ public class Ref {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class BooleanRef {
|
public static final class BooleanRef implements Serializable {
|
||||||
public boolean element;
|
public boolean element;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+12
@@ -4284,6 +4284,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("simplestClosure.kt")
|
||||||
public void testSimplestClosure() throws Exception {
|
public void testSimplestClosure() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/closures/simplestClosure.kt");
|
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 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 field element Z
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element B
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element C
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element D
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element F
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element I
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element J
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element Ljava/lang/Object;
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element S
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 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 field element Z
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element B
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element C
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element D
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element F
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element I
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element J
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element Ljava/lang/Object;
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
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 field element S
|
||||||
public fun <init> ()V
|
public fun <init> ()V
|
||||||
public fun toString ()Ljava/lang/String;
|
public fun toString ()Ljava/lang/String;
|
||||||
|
|||||||
Reference in New Issue
Block a user