diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt index ee93104dd3c..284b1b65e5a 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt @@ -89,6 +89,7 @@ inline fun isClassLocal(classNode: LighterASTNode, getParent: LighterASTNode.() parent?.tokenType == KT_FILE -> return true parent?.tokenType == CLASS_BODY && !(grandParent?.tokenType == OBJECT_DECLARATION && grandParent?.getParent()?.tokenType == OBJECT_LITERAL) -> return true parent?.tokenType == BLOCK && grandParent?.tokenType == SCRIPT -> return true + // NB: enum entry nested classes are considered local by FIR design (see discussion in KT-45115) parent?.tokenType == ENUM_ENTRY -> return true } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 5b8aea4bf71..1cb0e282638 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -793,11 +793,8 @@ class RawFirBuilder( override fun visitClassOrObject(classOrObject: KtClassOrObject, data: Unit): FirElement { return withChildClassName( classOrObject.nameAsSafeName, - classOrObject.isLocal - // TODO: currently enum entry initializer is represented in FIR as an FirAnonymousObject. Because of this, all - // nested declarations are now marked local. This causes the FirNestedClassChecker to ignore some invalid programs. - // See KT-45115 - || classOrObject.getStrictParentOfType() != null + // NB: enum entry nested classes are considered local by FIR design (see discussion in KT-45115) + isLocal = classOrObject.isLocal || classOrObject.getStrictParentOfType() != null ) { val classKind = when (classOrObject) { is KtObjectDeclaration -> ClassKind.OBJECT