From 88138fc4206723bfc0c3862af9e348c2d574be6b Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 1 Sep 2017 23:13:45 +0300 Subject: [PATCH] Parcelable: Use java/lang/Enum methods to read/write enum values (KT-20022) --- .../kotlin/android/parcel/serializers/ParcelSerializers.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 1d14052f46b..c43af3f05c4 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 @@ -418,13 +418,16 @@ internal class ObjectParcelSerializer( internal class EnumParcelSerializer(override val asmType: Type) : ParcelSerializer { override fun writeValue(v: InstructionAdapter) { - v.invokevirtual(asmType.internalName, "name", "()Ljava/lang/String;", false) + v.invokevirtual("java/lang/Enum", "name", "()Ljava/lang/String;", false) v.invokevirtual(PARCEL_TYPE.internalName, "writeString", "(Ljava/lang/String;)V", false) } override fun readValue(v: InstructionAdapter) { v.invokevirtual(PARCEL_TYPE.internalName, "readString", "()Ljava/lang/String;", false) - v.invokestatic(asmType.internalName, "valueOf", "(Ljava/lang/String;)${asmType.descriptor}", false) + v.aconst(asmType) + v.swap() + v.invokestatic("java/lang/Enum", "valueOf", "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;", false) + v.castIfNeeded(asmType) } }