Parcelize: Port the fix for KT-41553 to android-extensions
Fixes KT-46590.
This commit is contained in:
committed by
Alexander Udalov
parent
4ef81e93ef
commit
1198b40c11
+4
-1
@@ -119,7 +119,10 @@ class IrParcelSerializerFactory(symbols: AndroidSymbols) {
|
|||||||
|
|
||||||
val arrayType =
|
val arrayType =
|
||||||
if (classifier.defaultType.isPrimitiveArray()) classifier.defaultType else irBuiltIns.arrayClass.typeWith(elementType)
|
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
|
// This will only be hit if we have a custom serializer for booleans
|
||||||
|
|||||||
+10
@@ -180,6 +180,16 @@ public class ParcelBoxTestGenerated extends AbstractParcelBoxTest {
|
|||||||
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt39981.kt");
|
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")
|
@TestMetadata("listKinds.kt")
|
||||||
public void testListKinds() throws Exception {
|
public void testListKinds() throws Exception {
|
||||||
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
|
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
|
||||||
|
|||||||
+10
@@ -180,6 +180,16 @@ public class ParcelIrBoxTestGenerated extends AbstractParcelIrBoxTest {
|
|||||||
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt39981.kt");
|
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")
|
@TestMetadata("listKinds.kt")
|
||||||
public void testListKinds() throws Exception {
|
public void testListKinds() throws Exception {
|
||||||
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
|
runTest("plugins/android-extensions/android-extensions-compiler/testData/parcel/box/listKinds.kt");
|
||||||
|
|||||||
+29
@@ -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)
|
||||||
|
}
|
||||||
+29
@@ -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)
|
||||||
|
}
|
||||||
+1
@@ -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) {
|
public java.lang.Object createFromParcel(android.os.Parcel p0) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
|
LINENUMBER (21)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
INVOKEVIRTUAL (k/KotlinParcelable$Creator, createFromParcel, (Landroid/os/Parcel;)Lk/KotlinParcelable;)
|
INVOKEVIRTUAL (k/KotlinParcelable$Creator, createFromParcel, (Landroid/os/Parcel;)Lk/KotlinParcelable;)
|
||||||
|
|||||||
Vendored
+3
-2
@@ -20,6 +20,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
|
|||||||
|
|
||||||
public java.lang.Object[] newArray(int size) {
|
public java.lang.Object[] newArray(int size) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
|
LINENUMBER (10)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
ILOAD (1)
|
ILOAD (1)
|
||||||
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
||||||
@@ -40,7 +41,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (parcel)
|
LDC (parcel)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
|
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)
|
ALOAD (1)
|
||||||
INVOKEVIRTUAL (User$Companion, create, (Landroid/os/Parcel;)LUser;)
|
INVOKEVIRTUAL (User$Companion, create, (Landroid/os/Parcel;)LUser;)
|
||||||
ARETURN
|
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 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()
|
public int describeContents()
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -18,6 +18,7 @@ final class User$Companion : java/lang/Object, kotlinx/android/parcel/Parceler {
|
|||||||
|
|
||||||
public java.lang.Object[] newArray(int size) {
|
public java.lang.Object[] newArray(int size) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
|
LINENUMBER (10)
|
||||||
ALOAD (0)
|
ALOAD (0)
|
||||||
ILOAD (1)
|
ILOAD (1)
|
||||||
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
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) {
|
public final User[] newArray(int size) {
|
||||||
LABEL (L0)
|
LABEL (L0)
|
||||||
INVOKESTATIC (User, access$getCompanion$p$s2645995, ()LUser$Companion;)
|
INVOKESTATIC (User, access$getCompanion$p, ()LUser$Companion;)
|
||||||
ILOAD (1)
|
ILOAD (1)
|
||||||
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
INVOKEVIRTUAL (User$Companion, newArray, (I)[LUser;)
|
||||||
ARETURN
|
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 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()
|
public int describeContents()
|
||||||
|
|
||||||
@@ -82,4 +83,4 @@ public final class User : java/lang/Object, android/os/Parcelable {
|
|||||||
public final java.lang.String getLastName()
|
public final java.lang.String getLastName()
|
||||||
|
|
||||||
public void writeToParcel(android.os.Parcel out, int flags)
|
public void writeToParcel(android.os.Parcel out, int flags)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user