From 91f1cb88c166733f8e34f1122ccae7c13a3853c7 Mon Sep 17 00:00:00 2001 From: Sergey Shanshin Date: Wed, 17 Feb 2021 20:24:31 +0300 Subject: [PATCH] Support serialization of java enum classes in IR Fixes Kotlin/kotlinx.serialization#1334 --- .../serialization/compiler/backend/ir/GeneratorHelpers.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index f2dfc60ab42..adc0c01b8d4 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -663,8 +663,9 @@ interface IrBuilderExtension { fun findEnumValuesMethod(enumClass: ClassDescriptor): IrFunction { assert(enumClass.kind == ClassKind.ENUM_CLASS) return compilerContext.referenceClass(enumClass.fqNameSafe)?.let { - it.owner.functions.find { it.origin == IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER && it.name == Name.identifier("values") } - ?: throw AssertionError("Enum class does not have .values() function") + it.owner.functions.singleOrNull { f -> + f.name == Name.identifier("values") && f.valueParameters.isEmpty() && f.extensionReceiverParameter == null + } ?: throw AssertionError("Enum class does not have single .values() function") } ?: error("Couldn't load class $enumClass") }