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 =
|
||||
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
|
||||
|
||||
+10
@@ -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");
|
||||
|
||||
+10
@@ -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");
|
||||
|
||||
+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) {
|
||||
LABEL (L0)
|
||||
LINENUMBER (21)
|
||||
ALOAD (0)
|
||||
ALOAD (1)
|
||||
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) {
|
||||
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()
|
||||
|
||||
|
||||
+4
-3
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user