Parcelize, JVM IR: Fix types in nested containers
This commit is contained in:
committed by
Yan Zhulanow
parent
eaa5d08736
commit
8ab6411b93
+26
@@ -0,0 +1,26 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
@file:JvmName("TestKt")
|
||||
package test
|
||||
|
||||
import kotlinx.android.parcel.*
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import java.util.Arrays
|
||||
|
||||
@Parcelize
|
||||
class Data(val data: Array<Array<Int>>) : Parcelable
|
||||
|
||||
fun box() = parcelTest { parcel ->
|
||||
val first = Data(arrayOf(arrayOf(0, 1)))
|
||||
|
||||
first.writeToParcel(parcel, 0)
|
||||
|
||||
val bytes = parcel.marshall()
|
||||
parcel.unmarshall(bytes, 0, bytes.size)
|
||||
parcel.setDataPosition(0)
|
||||
|
||||
val second = readFromParcel<Data>(parcel)
|
||||
assert(second.data.size == 1)
|
||||
assert(Arrays.equals(second.data[0], arrayOf(0, 1)))
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
@file:JvmName("TestKt")
|
||||
package test
|
||||
|
||||
import kotlinx.android.parcel.*
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import java.util.Arrays
|
||||
|
||||
@Parcelize
|
||||
class Data(val data: List<Array<Int>>) : Parcelable
|
||||
|
||||
fun box() = parcelTest { parcel ->
|
||||
val first = Data(listOf(arrayOf(0, 1)))
|
||||
|
||||
first.writeToParcel(parcel, 0)
|
||||
|
||||
val bytes = parcel.marshall()
|
||||
parcel.unmarshall(bytes, 0, bytes.size)
|
||||
parcel.setDataPosition(0)
|
||||
|
||||
val second = readFromParcel<Data>(parcel)
|
||||
assert(second.data.size == 1)
|
||||
assert(Arrays.equals(second.data[0], arrayOf(0, 1)))
|
||||
}
|
||||
+28
@@ -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.util.Arrays
|
||||
|
||||
@Parcelize
|
||||
class Data(val data: Map<Array<Int>, Array<Int>>) : Parcelable
|
||||
|
||||
fun box() = parcelTest { parcel ->
|
||||
val first = Data(mapOf(arrayOf(0) to arrayOf(1)))
|
||||
|
||||
first.writeToParcel(parcel, 0)
|
||||
|
||||
val bytes = parcel.marshall()
|
||||
parcel.unmarshall(bytes, 0, bytes.size)
|
||||
parcel.setDataPosition(0)
|
||||
|
||||
val second = readFromParcel<Data>(parcel)
|
||||
assert(second.data.size == 1)
|
||||
val entry = second.data.entries.single()
|
||||
assert(Arrays.equals(entry.key, arrayOf(0)))
|
||||
assert(Arrays.equals(entry.value, arrayOf(1)))
|
||||
}
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JVM
|
||||
|
||||
@file:JvmName("TestKt")
|
||||
package test
|
||||
|
||||
import kotlinx.android.parcel.*
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import android.util.SparseArray
|
||||
import java.util.Arrays
|
||||
|
||||
@Parcelize
|
||||
class Data(val data: SparseArray<Array<Int>>) : Parcelable
|
||||
|
||||
fun box() = parcelTest { parcel ->
|
||||
var array = SparseArray<Array<Int>>()
|
||||
array.append(0, arrayOf(0, 1))
|
||||
val first = Data(array)
|
||||
|
||||
first.writeToParcel(parcel, 0)
|
||||
|
||||
val bytes = parcel.marshall()
|
||||
parcel.unmarshall(bytes, 0, bytes.size)
|
||||
parcel.setDataPosition(0)
|
||||
|
||||
val second = readFromParcel<Data>(parcel)
|
||||
assert(second.data.size() == 1)
|
||||
assert(Arrays.equals(second.data.get(0), arrayOf(0, 1)))
|
||||
}
|
||||
-2
@@ -112,8 +112,6 @@ public final class test/Foo$Creator : java/lang/Object, android/os/Parcelable$Cr
|
||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||
NEW
|
||||
DUP
|
||||
GETSTATIC (Companion, Lk/KotlinParcelable$Companion;)
|
||||
POP
|
||||
GETSTATIC (CREATOR, Lk/KotlinParcelable$Creator;)
|
||||
ALOAD (1)
|
||||
INVOKEVIRTUAL (k/KotlinParcelable$Creator, createFromParcel, (Landroid/os/Parcel;)Lk/KotlinParcelable;)
|
||||
|
||||
plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/listInsideList.ir.txt
Vendored
+1
-2
@@ -44,14 +44,13 @@ public final class Test : java/lang/Object, android/os/Parcelable {
|
||||
IFEQ (L2)
|
||||
ALOAD (4)
|
||||
INVOKEINTERFACE (java/util/Iterator, next, ()Ljava/lang/Object;)
|
||||
CHECKCAST
|
||||
ASTORE (5)
|
||||
ALOAD (1)
|
||||
ALOAD (5)
|
||||
CHECKCAST
|
||||
INVOKEINTERFACE (java/util/List, size, ()I)
|
||||
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
|
||||
ALOAD (5)
|
||||
CHECKCAST
|
||||
INVOKEINTERFACE (java/util/List, iterator, ()Ljava/util/Iterator;)
|
||||
ASTORE (6)
|
||||
LABEL (L3)
|
||||
|
||||
Vendored
+13
-2
@@ -1,7 +1,7 @@
|
||||
public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creator {
|
||||
public void <init>()
|
||||
|
||||
public final java.lang.Object createFromParcel(android.os.Parcel in) {
|
||||
public final Test createFromParcel(android.os.Parcel in) {
|
||||
LABEL (L0)
|
||||
ALOAD (1)
|
||||
LDC (in)
|
||||
@@ -18,7 +18,18 @@ public final class Test$Creator : java/lang/Object, android/os/Parcelable$Creato
|
||||
LABEL (L1)
|
||||
}
|
||||
|
||||
public final java.lang.Object[] newArray(int size)
|
||||
public java.lang.Object createFromParcel(android.os.Parcel p0) {
|
||||
LABEL (L0)
|
||||
LINENUMBER (10)
|
||||
ALOAD (0)
|
||||
ALOAD (1)
|
||||
INVOKEVIRTUAL (Test$Creator, createFromParcel, (Landroid/os/Parcel;)LTest;)
|
||||
ARETURN
|
||||
}
|
||||
|
||||
public final Test[] newArray(int size)
|
||||
|
||||
public java.lang.Object[] newArray(int p0)
|
||||
}
|
||||
|
||||
public final class Test : java/lang/Object, android/os/Parcelable {
|
||||
|
||||
Vendored
+7
-1
@@ -145,8 +145,14 @@ public final class User : java/lang/Object, android/os/Parcelable {
|
||||
ALOAD (1)
|
||||
ALOAD (0)
|
||||
GETFIELD (isProUser, Z)
|
||||
IFEQ (L1)
|
||||
ICONST_1
|
||||
GOTO (L2)
|
||||
LABEL (L1)
|
||||
ICONST_0
|
||||
LABEL (L2)
|
||||
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
|
||||
RETURN
|
||||
LABEL (L1)
|
||||
LABEL (L3)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user