Fir2IrLazyClass: generate enum values() / valueOf() properly
This commit is contained in:
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
|||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
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.fir.types.isNullableAny
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -131,6 +132,13 @@ class Fir2IrLazyClass(
|
|||||||
is FirSimpleFunction -> {
|
is FirSimpleFunction -> {
|
||||||
if (declaration.name !in processedNames) {
|
if (declaration.name !in processedNames) {
|
||||||
processedNames += declaration.name
|
processedNames += declaration.name
|
||||||
|
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) {
|
scope.processFunctionsByName(declaration.name) {
|
||||||
if (it is FirNamedFunctionSymbol && it.callableId.classId == fir.symbol.classId) {
|
if (it is FirNamedFunctionSymbol && it.callableId.classId == fir.symbol.classId) {
|
||||||
if (it.isAbstractMethodOfAny()) {
|
if (it.isAbstractMethodOfAny()) {
|
||||||
@@ -141,6 +149,7 @@ class Fir2IrLazyClass(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
is FirProperty -> {
|
is FirProperty -> {
|
||||||
if (declaration.name !in processedNames) {
|
if (declaration.name !in processedNames) {
|
||||||
processedNames += declaration.name
|
processedNames += declaration.name
|
||||||
|
|||||||
Reference in New Issue
Block a user