Parcelize: Port the fix for KT-41553 to android-extensions

Fixes KT-46590.
This commit is contained in:
Steven Schäfer
2021-05-11 14:36:54 +02:00
committed by Alexander Udalov
parent 4ef81e93ef
commit 1198b40c11
8 changed files with 90 additions and 6 deletions
@@ -119,7 +119,10 @@ class IrParcelSerializerFactory(symbols: AndroidSymbols) {
val arrayType =
if (classifier.defaultType.isPrimitiveArray()) classifier.defaultType else irBuiltIns.arrayClass.typeWith(elementType)
return IrArrayParcelSerializer(arrayType, elementType, get(elementType, scope, parcelizeType, strict()))
return wrapNullableSerializerIfNeeded(
irType,
IrArrayParcelSerializer(arrayType, elementType, get(elementType, scope, parcelizeType, strict()))
)
}
// This will only be hit if we have a custom serializer for booleans
@@ -180,6 +180,16 @@ public class ParcelBoxTestGenerated extends AbstractParcelBoxTest {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt39981.kt");
}
@TestMetadata("kt41553.kt")
public void testKt41553() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt41553.kt");
}
@TestMetadata("kt41553_2.kt")
public void testKt41553_2() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt41553_2.kt");
}
@TestMetadata("listKinds.kt")
public void testListKinds() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
@@ -180,6 +180,16 @@ public class ParcelIrBoxTestGenerated extends AbstractParcelIrBoxTest {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt39981.kt");
}
@TestMetadata("kt41553.kt")
public void testKt41553() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt41553.kt");
}
@TestMetadata("kt41553_2.kt")
public void testKt41553_2() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt41553_2.kt");
}
@TestMetadata("listKinds.kt")
public void testListKinds() throws Exception {
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
@@ -0,0 +1,29 @@
// WITH_RUNTIME
@file:JvmName("TestKt")
package test
import kotlinx.android.parcel.*
import android.os.Parcel
import android.os.Parcelable
import java.util.Arrays
@Parcelize
data class A(val params: @RawValue Array<*>? = null): Parcelable
fun box() = parcelTest { parcel ->
val a1 = A(arrayOf<Int>(1,2,3))
val b1 = A()
a1.writeToParcel(parcel, 0)
b1.writeToParcel(parcel, 0)
val bytes = parcel.marshall()
parcel.unmarshall(bytes, 0, bytes.size)
parcel.setDataPosition(0)
val a2 = readFromParcel<A>(parcel)
assert(a2.params != null)
assert(Arrays.equals(a1.params!!, a2.params!!))
val b2 = readFromParcel<A>(parcel)
assert(b1 == b2)
}
@@ -0,0 +1,29 @@
// WITH_RUNTIME
@file:JvmName("TestKt")
package test
import kotlinx.android.parcel.*
import android.os.Parcel
import android.os.Parcelable
import java.util.Arrays
@Parcelize
data class A(val params: Array<Int>? = null): Parcelable
fun box() = parcelTest { parcel ->
val a1 = A(arrayOf(1,2,3))
val b1 = A()
a1.writeToParcel(parcel, 0)
b1.writeToParcel(parcel, 0)
val bytes = parcel.marshall()
parcel.unmarshall(bytes, 0, bytes.size)
parcel.setDataPosition(0)
val a2 = readFromParcel<A>(parcel)
assert(a2.params != null)
assert(Arrays.equals(a1.params!!, a2.params!!))
val b2 = readFromParcel<A>(parcel)
assert(b1 == b2)
}
@@ -29,6 +29,7 @@ public final class k/KotlinParcelable$Creator : java/lang/Object, android/os/Par
public java.lang.Object createFromParcel(android.os.Parcel p0) {
LABEL (L0)
LINENUMBER (21)
ALOAD (0)
ALOAD (1)
INVOKEVIRTUAL (k/KotlinParcelable$Creator, createFromParcel, (Landroid/os/Parcel;)Lk/KotlinParcelable;)
@@ -20,6 +20,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public java.lang.Object[] newArray(int size) {
LABEL (L0)
LINENUMBER (10)
ALOAD (0)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
@@ -40,7 +41,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
ALOAD (1)
LDC (parcel)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
INVOKESTATIC (User, access$getCompanion$p$s2645995, ()LUser$Companion;)
INVOKESTATIC (User, access$getCompanion$p, ()LUser$Companion;)
ALOAD (1)
INVOKEVIRTUAL (User$Companion, create, (Landroid/os/Parcel;)LUser;)
ARETURN
@@ -89,7 +90,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public void <init>(java.lang.String firstName, java.lang.String lastName, int age)
public final static User$Companion access$getCompanion$p$s2645995()
public final static User$Companion access$getCompanion$p()
public int describeContents()
@@ -18,6 +18,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
public java.lang.Object[] newArray(int size) {
LABEL (L0)
LINENUMBER (10)
ALOAD (0)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
@@ -39,7 +40,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
public final User[] newArray(int size) {
LABEL (L0)
INVOKESTATIC (User, access$getCompanion$p$s2645995, ()LUser$Companion;)
INVOKESTATIC (User, access$getCompanion$p, ()LUser$Companion;)
ILOAD (1)
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
ARETURN
@@ -71,7 +72,7 @@ public final class User : java/lang/Object, android/os/Parcelable {
public void <init>(java.lang.String firstName, java.lang.String lastName, int age)
public final static User$Companion access$getCompanion$p$s2645995()
public final static User$Companion access$getCompanion$p()
public int describeContents()
@@ -82,4 +83,4 @@ public final class User : java/lang/Object, android/os/Parcelable {
public final java.lang.String getLastName()
public void writeToParcel(android.os.Parcel out, int flags)
}
}