From eee28d850727a66a7801c800bb3b61539b7fd3d3 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Mon, 21 Aug 2017 18:25:15 +0300 Subject: [PATCH] Parcelable: Fix signature for Serializable Parcel serializer (KT-19749) --- .../parcel/serializers/ParcelSerializer.kt | 4 +-- .../testData/parcel/box/kt19749.kt | 28 +++++++++++++++++++ .../testData/parcel/codegen/serializable.txt | 10 ++++--- .../kotlin/android/parcel/ParcelBoxTest.kt | 1 + 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt19749.kt diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt index b350611cc61..83fa01f1bef 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt @@ -194,8 +194,8 @@ interface ParcelSerializer { } type.isSerializable() -> NullCompliantObjectParcelSerializer(asmType, - Method("writeSerializable"), - Method("readSerializable")) + Method("writeSerializable", "(Ljava/io/Serializable;)V"), + Method("readSerializable", "()Ljava/io/Serializable;")) else -> { if (strict && !type.annotations.hasAnnotation(RAWVALUE_ANNOTATION_FQNAME)) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt19749.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt19749.kt new file mode 100644 index 00000000000..4d62df63fea --- /dev/null +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt19749.kt @@ -0,0 +1,28 @@ +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.android.parcel.* +import android.os.Parcel +import android.os.Parcelable +import java.io.Serializable + +class MHelp(var m1: String): Serializable { + val m2 = 9 +} + +@Parcelize +class M(val m: @RawValue MHelp) : Parcelable + +fun box() = parcelTest { parcel -> + val test = M(MHelp("A")) + test.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + + val test2 = readFromParcel(parcel) + + assert(test.m.m1 == test2.m.m1) +} \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt index 3b9f0cf8d49..ab3d0d97823 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/serializable.txt @@ -21,9 +21,11 @@ public static class User$Creator : java/lang/Object, android/os/Parcelable$Creat NEW DUP ALOAD (1) - INVOKEVIRTUAL (android/os/Parcel, readSerializable, ()LSerializableSimple;) + INVOKEVIRTUAL (android/os/Parcel, readSerializable, ()Ljava/io/Serializable;) + CHECKCAST ALOAD (1) - INVOKEVIRTUAL (android/os/Parcel, readSerializable, ()LSerializableSimple;) + INVOKEVIRTUAL (android/os/Parcel, readSerializable, ()Ljava/io/Serializable;) + CHECKCAST INVOKESPECIAL (User, , (LSerializableSimple;LSerializableSimple;)V) ARETURN LABEL (L1) @@ -63,11 +65,11 @@ public final class User : java/lang/Object, android/os/Parcelable { ALOAD (1) ALOAD (0) GETFIELD (notNull, LSerializableSimple;) - INVOKEVIRTUAL (android/os/Parcel, writeSerializable, (LSerializableSimple;)V) + INVOKEVIRTUAL (android/os/Parcel, writeSerializable, (Ljava/io/Serializable;)V) ALOAD (1) ALOAD (0) GETFIELD (nullable, LSerializableSimple;) - INVOKEVIRTUAL (android/os/Parcel, writeSerializable, (LSerializableSimple;)V) + INVOKEVIRTUAL (android/os/Parcel, writeSerializable, (Ljava/io/Serializable;)V) RETURN LABEL (L1) } diff --git a/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt b/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt index 85c3453de6c..00680da66bc 100644 --- a/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt +++ b/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt @@ -46,4 +46,5 @@ class ParcelBoxTest : AbstractParcelBoxTest() { fun testEnums() = doTest("enums") fun testObjects() = doTest("objects") fun testNestedParcelable() = doTest("nestedParcelable") + fun testKt19749() = doTest("kt19749") } \ No newline at end of file