KT-56687: Unify handling of EnumEntries.
`supportsEnumEntries` in `EnumCLassLowering` is not really needed, but it was left just in case. Both K1 and K2 ensure the feature is enabled before they generate IR. `supportsEnumEntries` is not enough, because the frontend will not generate `entries` if `kotlin.enums.EnumEntries` is not available (linking against an outdated stdlib is considered a valid use-case). From the resolution point of view, it's OK to resolve into `entries` while the feature is off, because then K1 reports an error on the call site. ^KT-56687 Fixed ^KT-55614 Fixed
This commit is contained in:
committed by
Space Team
parent
bcfafc601e
commit
bb368bd191
@@ -45,6 +45,12 @@ var FirCallableDeclaration.containingClassForStaticMemberAttr: ConeClassLikeLook
|
||||
var FirRegularClass.containingClassForLocalAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||
var FirDanglingModifierList.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||
|
||||
private object HasNoEnumEntriesKey : FirDeclarationDataKey()
|
||||
var FirClass.hasNoEnumEntriesAttr: Boolean? by FirDeclarationDataRegistry.data(HasNoEnumEntriesKey)
|
||||
|
||||
// Must be true iff the class metadata contains the hasEnumEntries flag
|
||||
val FirClass.hasEnumEntries get() = hasNoEnumEntriesAttr != true
|
||||
|
||||
private object IsNewPlaceForBodyGeneration : FirDeclarationDataKey()
|
||||
var FirRegularClass.isNewPlaceForBodyGeneration: Boolean? by FirDeclarationDataRegistry.data(IsNewPlaceForBodyGeneration)
|
||||
|
||||
|
||||
@@ -7,14 +7,13 @@ package org.jetbrains.kotlin.fir
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.*
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||
@@ -254,3 +253,6 @@ fun <T> List<T>.smartPlus(other: List<T>): List<T> = when {
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
// Source element may be missing if the class came from a library
|
||||
fun FirVariable.isEnumEntries(containingClass: FirClass) = name == StandardNames.ENUM_ENTRIES && containingClass.isEnumClass
|
||||
|
||||
Reference in New Issue
Block a user