Parcelable: Convert I to Z explicitly, older Android Dex has strict checks for it (KT-20928)

This commit is contained in:
Yan Zhulanow
2017-10-30 16:21:01 +09:00
parent e28cffd0ad
commit 425d104255
2 changed files with 31 additions and 1 deletions
@@ -676,6 +676,7 @@ internal open class PrimitiveTypeParcelSerializer private constructor(final over
it to when (it) {
Type.CHAR_TYPE -> CharParcelSerializer
Type.SHORT_TYPE -> ShortParcelSerializer
Type.BOOLEAN_TYPE -> BooleanParcelSerializer
else -> PrimitiveTypeParcelSerializer(it)
}
}.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 readMethod = READ_METHOD_NAMES[asmType]!!
@@ -6,6 +6,7 @@ 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)
@@ -16,9 +17,15 @@ public final class User$Creator : java/lang/Object, android/os/Parcelable$Creato
INVOKEVIRTUAL (android/os/Parcel, readInt, ()I)
ALOAD (1)
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)
ARETURN
LABEL (L1)
LABEL (L4)
Local variables:
this: LUser$Creator;