From c744dfba9c3e1d5802fd60c298b3139900761c36 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 29 Jul 2020 22:34:15 -0700 Subject: [PATCH] FIR: distinguish anonymous object as enum entry when scoping so that `this` reference with the enum entry name as label can be resolved --- .../body/resolve/FirDeclarationsResolveTransformer.kt | 6 +++++- .../codegen/box/enum/innerClassMethodInEnumEntryClass2.kt | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 023664aa7d5..70b559bd3db 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -400,7 +400,11 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor this.type = type } } - var result = withScopesForClass(null, anonymousObject, type) { + val labelName = + if (anonymousObject.classKind == ClassKind.ENUM_ENTRY) { + anonymousObject.getPrimaryConstructorIfAny()?.symbol?.callableId?.className?.shortName() + } else null + var result = withScopesForClass(labelName, anonymousObject, type) { transformDeclarationContent(anonymousObject, data).single as FirAnonymousObject } if (!implicitTypeOnly && result.controlFlowGraphReference == FirEmptyControlFlowGraphReference) { diff --git a/compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt b/compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt index 1f5a1ca3ca7..38a1ffc04f6 100644 --- a/compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt +++ b/compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR enum class A { X { val x = "OK"