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,12 +132,20 @@ class Fir2IrLazyClass(
|
|||||||
is FirSimpleFunction -> {
|
is FirSimpleFunction -> {
|
||||||
if (declaration.name !in processedNames) {
|
if (declaration.name !in processedNames) {
|
||||||
processedNames += declaration.name
|
processedNames += declaration.name
|
||||||
scope.processFunctionsByName(declaration.name) {
|
if (fir.classKind == ClassKind.ENUM_CLASS && declaration.isStatic &&
|
||||||
if (it is FirNamedFunctionSymbol && it.callableId.classId == fir.symbol.classId) {
|
declaration.returnTypeRef is FirResolvedTypeRef
|
||||||
if (it.isAbstractMethodOfAny()) {
|
) {
|
||||||
return@processFunctionsByName
|
// 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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user