Fir2IrLazyClass: generate enum values() / valueOf() properly

This commit is contained in:
Mikhail Glukhikh
2020-07-22 14:53:38 +03:00
parent 8bae0f2d0c
commit 40256aa43d
@@ -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
}
}
}