diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt index bf0132eea4e..90e1820cfed 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/serializers/ParcelSerializer.kt @@ -167,12 +167,6 @@ interface ParcelSerializer { Method("writeException"), Method("readException"))) - // Write at least a nullability byte. - // We don't want parcel to be empty in case if all constructor parameters are objects - type.isNamedObject() -> NullAwareParcelSerializerWrapper(ObjectParcelSerializer(asmType, type, typeMapper)) - - type.isEnum() -> wrapToNullAwareIfNeeded(type, EnumParcelSerializer(asmType)) - asmType.isFileDescriptor() -> wrapToNullAwareIfNeeded(type, NullCompliantObjectParcelSerializer(asmType, Method("writeRawFileDescriptor"), Method("readRawFileDescriptor"))) @@ -197,6 +191,12 @@ interface ParcelSerializer { } } + // Write at least a nullability byte. + // We don't want parcel to be empty in case if all constructor parameters are objects + type.isNamedObject() -> NullAwareParcelSerializerWrapper(ObjectParcelSerializer(asmType, type, typeMapper)) + + type.isEnum() -> wrapToNullAwareIfNeeded(type, EnumParcelSerializer(asmType)) + type.isSerializable() -> NullCompliantObjectParcelSerializer(asmType, Method("writeSerializable", "(Ljava/io/Serializable;)V"), Method("readSerializable", "()Ljava/io/Serializable;")) diff --git a/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt20021.kt b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt20021.kt new file mode 100644 index 00000000000..a4261cdf96f --- /dev/null +++ b/plugins/android-extensions/android-extensions-compiler/testData/parcel/box/kt20021.kt @@ -0,0 +1,45 @@ +// WITH_RUNTIME + +@file:JvmName("TestKt") +package test + +import kotlinx.android.parcel.* +import android.os.Parcel +import android.os.Parcelable +import java.util.Arrays + +enum class ParcelableEnum : Parcelable { + ONE, TWO, THREE; + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeInt(ordinal) + } + + override fun describeContents() = 0 + + companion object { + @JvmField + val CREATOR: Parcelable.Creator = object : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = ParcelableEnum.ONE + override fun newArray(size: Int) = arrayOfNulls(size) + } + } +} + +@Parcelize +class Test(val parcelableEnum: ParcelableEnum): Parcelable + +fun box() = parcelTest { parcel -> + val first = Test(ParcelableEnum.THREE) + + first.writeToParcel(parcel, 0) + + val bytes = parcel.marshall() + parcel.unmarshall(bytes, 0, bytes.size) + + val first2 = readFromParcel(parcel) + + assert(first.parcelableEnum == ParcelableEnum.THREE) + assert(first2.parcelableEnum == ParcelableEnum.ONE) + assert(first != first2) +} \ No newline at end of file diff --git a/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt b/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt index cd0d8d9afce..1b3827c4a25 100644 --- a/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt +++ b/plugins/plugins-tests/tests/org/jetbrains/kotlin/android/parcel/ParcelBoxTest.kt @@ -50,4 +50,5 @@ class ParcelBoxTest : AbstractParcelBoxTest() { fun testKt19747() = doTest("kt19747") fun testKt19747_2() = doTest("kt19747_2") fun test20002() = doTest("kt20002") + fun test20021() = doTest("kt20021") } \ No newline at end of file