Parcelable: Convert I to Z explicitly, older Android Dex has strict checks for it (KT-20928)
This commit is contained in:
+23
@@ -676,6 +676,7 @@ internal open class PrimitiveTypeParcelSerializer private constructor(final over
|
|||||||
it to when (it) {
|
it to when (it) {
|
||||||
Type.CHAR_TYPE -> CharParcelSerializer
|
Type.CHAR_TYPE -> CharParcelSerializer
|
||||||
Type.SHORT_TYPE -> ShortParcelSerializer
|
Type.SHORT_TYPE -> ShortParcelSerializer
|
||||||
|
Type.BOOLEAN_TYPE -> BooleanParcelSerializer
|
||||||
else -> PrimitiveTypeParcelSerializer(it)
|
else -> PrimitiveTypeParcelSerializer(it)
|
||||||
}
|
}
|
||||||
}.toMap()
|
}.toMap()
|
||||||
@@ -707,6 +708,28 @@ internal open class PrimitiveTypeParcelSerializer private constructor(final over
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object BooleanParcelSerializer : PrimitiveTypeParcelSerializer(Type.BOOLEAN_TYPE) {
|
||||||
|
override fun writeValue(v: InstructionAdapter) {
|
||||||
|
super.writeValue(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun readValue(v: InstructionAdapter) {
|
||||||
|
super.readValue(v)
|
||||||
|
|
||||||
|
val falseLabel = Label()
|
||||||
|
val conditionIsOver = Label()
|
||||||
|
|
||||||
|
v.ifeq(falseLabel)
|
||||||
|
v.iconst(1)
|
||||||
|
v.goTo(conditionIsOver)
|
||||||
|
|
||||||
|
v.visitLabel(falseLabel)
|
||||||
|
v.iconst(0)
|
||||||
|
|
||||||
|
v.visitLabel(conditionIsOver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val writeMethod = WRITE_METHOD_NAMES[asmType]!!
|
private val writeMethod = WRITE_METHOD_NAMES[asmType]!!
|
||||||
private val readMethod = READ_METHOD_NAMES[asmType]!!
|
private val readMethod = READ_METHOD_NAMES[asmType]!!
|
||||||
|
|
||||||
|
|||||||
+8
-1
@@ -6,6 +6,7 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
LDC (in)
|
LDC (in)
|
||||||
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkParameterIsNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
|
||||||
|
LABEL (L1)
|
||||||
NEW
|
NEW
|
||||||
DUP
|
DUP
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
@@ -16,9 +17,15 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
|
|||||||
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
|
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
|
||||||
ALOAD (1)
|
ALOAD (1)
|
||||||
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
|
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
|
||||||
|
IFLE (L2)
|
||||||
|
ICONST_1
|
||||||
|
GOTO (L3)
|
||||||
|
LABEL (L2)
|
||||||
|
ICONST_0
|
||||||
|
LABEL (L3)
|
||||||
INVOKESPECIAL (User, <init>, (Ljava/lang/String;Ljava/lang/String;IZ)V)
|
INVOKESPECIAL (User, <init>, (Ljava/lang/String;Ljava/lang/String;IZ)V)
|
||||||
ARETURN
|
ARETURN
|
||||||
LABEL (L1)
|
LABEL (L4)
|
||||||
|
|
||||||
Local variables:
|
Local variables:
|
||||||
this: LUser$Creator;
|
this: LUser$Creator;
|
||||||
|
|||||||
Reference in New Issue
Block a user