Parcelable: Use specialized write/create methods where available (KT-20057)

This commit is contained in:
Yan Zhulanow
2017-09-06 23:57:45 +03:00
committed by Yan Zhulanow
parent f6d7a17227
commit 1b688182cd
5 changed files with 104 additions and 26 deletions
@@ -7,4 +7,10 @@ import android.os.IBinder
import android.os.IInterface
@Parcelize
class User(val binder: IBinder, val intf: IInterface?) : Parcelable
class User(
val binder: IBinder,
val binderArray: Array<IBinder>,
val binderList: List<IBinder>,
val binderArrayList: ArrayList<IBinder>, // should be serialized using our strategy, not using Parcel.writeBinderList()
val intf: IInterface?
) : Parcelable
@@ -6,15 +6,45 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
ALOAD (1)
LDC (in)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L1)
NEW
DUP
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readStrongBinder, ()Landroid/os/IBinder;)
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, createBinderArray, ()[Landroid/os/IBinder;)
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, createBinderArrayList, ()Ljava/util/ArrayList;)
CHECKCAST
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
DUP
NEW
DUP_X1
SWAP
INVOKESPECIAL (java/util/ArrayList, <init>, (I)V)
LABEL (L2)
SWAP
DUP_X1
IFEQ (L3)
DUP
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readStrongBinder, ()Landroid/os/IBinder;)
INVOKEVIRTUAL (java/util/ArrayList, add, (Ljava/lang/Object;)Z)
POP
SWAP
LDC (-1)
IADD
SWAP
GOTO (L2)
LABEL (L3)
SWAP
POP
ALOAD (1)
INVOKEVIRTUAL (android/os/Parcel, readStrongInterface, ()Landroid/os/IInterface;)
INVOKESPECIAL (User, <init>, (Landroid/os/IBinder;Landroid/os/IInterface;)V)
INVOKESPECIAL (User, <init>, (Landroid/os/IBinder;[Landroid/os/IBinder;Ljava/util/List;Ljava/util/ArrayList;Landroid/os/IInterface;)V)
ARETURN
LABEL (L1)
LABEL (L4)
}
public final User[] newArray(int p0)
@@ -25,16 +55,28 @@ public final class User : java/lang/Object, android/os/Parcelable {
private final android.os.IBinder binder
private final android.os.IBinder[] binderArray
private final java.util.ArrayList binderArrayList
private final java.util.List binderList
private final android.os.IInterface intf
static void <clinit>()
public void <init>(android.os.IBinder p0, android.os.IInterface p1)
public void <init>(android.os.IBinder p0, android.os.IBinder[] p1, java.util.List p2, java.util.ArrayList p3, android.os.IInterface p4)
public final int describeContents()
public final android.os.IBinder getBinder()
public final android.os.IBinder[] getBinderArray()
public final java.util.ArrayList getBinderArrayList()
public final java.util.List getBinderList()
public final android.os.IInterface getIntf()
public final void writeToParcel(android.os.Parcel p0, int p1) {
@@ -48,9 +90,37 @@ public final class User : java/lang/Object, android/os/Parcelable {
INVOKEVIRTUAL (android/os/Parcel, writeStrongBinder, (Landroid/os/IBinder;)V)
ALOAD (1)
ALOAD (0)
GETFIELD (binderArray, [Landroid/os/IBinder;)
INVOKEVIRTUAL (android/os/Parcel, writeBinderArray, ([Landroid/os/IBinder;)V)
ALOAD (1)
ALOAD (0)
GETFIELD (binderList, Ljava/util/List;)
INVOKEVIRTUAL (android/os/Parcel, writeBinderList, (Ljava/util/List;)V)
ALOAD (1)
ALOAD (0)
GETFIELD (binderArrayList, Ljava/util/ArrayList;)
DUP_X1
INVOKEINTERFACE (java/util/Collection, size, ()I)
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
INVOKEINTERFACE (java/util/Collection, iterator, ()Ljava/util/Iterator;)
LABEL (L1)
DUP
INVOKEINTERFACE (java/util/Iterator, hasNext, ()Z)
IFEQ (L2)
DUP
ALOAD (1)
SWAP
INVOKEINTERFACE (java/util/Iterator, next, ()Ljava/lang/Object;)
CHECKCAST
INVOKEVIRTUAL (android/os/Parcel, writeStrongBinder, (Landroid/os/IBinder;)V)
GOTO (L1)
LABEL (L2)
POP
ALOAD (1)
ALOAD (0)
GETFIELD (intf, Landroid/os/IInterface;)
INVOKEVIRTUAL (android/os/Parcel, writeStrongInterface, (Landroid/os/IInterface;)V)
RETURN
LABEL (L1)
LABEL (L3)
}
}
@@ -4,4 +4,4 @@
import kotlinx.android.parcel.*
@Parcelize
class Test(val names: List<List<List<String>>>)
class Test(val names: List<List<ArrayList<String>>>)
@@ -27,24 +27,8 @@ public final class Test : java/lang/Object {
ALOAD (1)
ALOAD (0)
GETFIELD (names, Ljava/util/List;)
DUP_X1
INVOKEINTERFACE (java/util/Collection, size, ()I)
INVOKEVIRTUAL (android/os/Parcel, writeInt, (I)V)
INVOKEINTERFACE (java/util/Collection, iterator, ()Ljava/util/Iterator;)
LABEL (L1)
DUP
INVOKEINTERFACE (java/util/Iterator, hasNext, ()Z)
IFEQ (L2)
DUP
ALOAD (1)
SWAP
INVOKEINTERFACE (java/util/Iterator, next, ()Ljava/lang/Object;)
CHECKCAST
INVOKEVIRTUAL (android/os/Parcel, writeString, (Ljava/lang/String;)V)
GOTO (L1)
LABEL (L2)
POP
INVOKEVIRTUAL (android/os/Parcel, writeStringList, (Ljava/util/List;)V)
RETURN
LABEL (L3)
LABEL (L1)
}
}