diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt index f97e1793297..c8c7c063b57 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializers.kt @@ -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]!! diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt index 35406082d5d..acbb849af0b 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/codegen/simple.txt @@ -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, , (Ljava/lang/String;Ljava/lang/String;IZ)V) ARETURN - LABEL (L1) + LABEL (L4) Local variables: this: LUser$Creator;