diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt index 5ea256f6f0a..166a6c473bd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt @@ -152,6 +152,7 @@ enum class FirTowerDataMode { NESTED_CLASS, COMPANION_OBJECT, CONSTRUCTOR_HEADER, + ENUM_ENTRY, SPECIAL, } @@ -160,6 +161,7 @@ class FirTowerDataContextsForClassParts( forNestedClasses: FirTowerDataContext? = null, forCompanionObject: FirTowerDataContext? = null, forConstructorHeaders: FirTowerDataContext? = null, + forEnumEntries: FirTowerDataContext? = null, val primaryConstructorPureParametersScope: FirLocalScope? = null, val primaryConstructorAllParametersScope: FirLocalScope? = null, ) { @@ -170,6 +172,7 @@ class FirTowerDataContextsForClassParts( modeMap[NESTED_CLASS] = forNestedClasses modeMap[COMPANION_OBJECT] = forCompanionObject modeMap[CONSTRUCTOR_HEADER] = forConstructorHeaders + modeMap[ENUM_ENTRY] = forEnumEntries } var mode: FirTowerDataMode = MEMBER_DECLARATION diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index 7c3af6f13e8..9db9bad0697 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -418,6 +418,16 @@ class BodyResolveContext( val scopeForConstructorHeader = staticsAndCompanion.addNonLocalScopeIfNotNull(typeParameterScope) + /* + * Scope for enum entries is equal to initial scope for constructor header + * + * The only difference that we add value parameters to local scope for constructors + * and should not do this for enum entries + */ + + @Suppress("UnnecessaryVariable") + val scopeForEnumEntries = scopeForConstructorHeader + val newTowerDataContextForStaticNestedClasses = if ((owner as? FirRegularClass)?.classKind?.isSingleton == true) forMembersResolution @@ -437,6 +447,7 @@ class BodyResolveContext( newTowerDataContextForStaticNestedClasses, statics, scopeForConstructorHeader, + scopeForEnumEntries, primaryConstructorPureParametersScope, primaryConstructorAllParametersScope ) @@ -569,7 +580,7 @@ class BodyResolveContext( @OptIn(PrivateForInline::class) inline fun forEnumEntry( f: () -> T - ): T = withTowerDataMode(FirTowerDataMode.CONSTRUCTOR_HEADER, f) + ): T = withTowerDataMode(FirTowerDataMode.ENUM_ENTRY, f) @OptIn(PrivateForInline::class) inline fun withAnonymousInitializer(