From 40256aa43dfbd12dc53e2fbe5b9866d52cf7295b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 22 Jul 2020 14:53:38 +0300 Subject: [PATCH] Fir2IrLazyClass: generate enum values() / valueOf() properly --- .../kotlin/fir/lazy/Fir2IrLazyClass.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt index 18304bea14b..4870053b3b9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.isNullableAny import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* @@ -131,12 +132,20 @@ class Fir2IrLazyClass( is FirSimpleFunction -> { if (declaration.name !in processedNames) { processedNames += declaration.name - scope.processFunctionsByName(declaration.name) { - if (it is FirNamedFunctionSymbol && it.callableId.classId == fir.symbol.classId) { - if (it.isAbstractMethodOfAny()) { - return@processFunctionsByName + if (fir.classKind == ClassKind.ENUM_CLASS && declaration.isStatic && + declaration.returnTypeRef is FirResolvedTypeRef + ) { + // Handle values() / valueOf() separately + // TODO: handle other static functions / properties properly + result += declarationStorage.getIrFunctionSymbol(declaration.symbol).owner + } else { + scope.processFunctionsByName(declaration.name) { + if (it is FirNamedFunctionSymbol && it.callableId.classId == fir.symbol.classId) { + if (it.isAbstractMethodOfAny()) { + return@processFunctionsByName + } + result += declarationStorage.getIrFunctionSymbol(it).owner } - result += declarationStorage.getIrFunctionSymbol(it).owner } } }