From 4dc040b91af583afdcc518ee5841e3c45ac5ee81 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 26 Feb 2021 20:16:25 +0100 Subject: [PATCH] FIR: update enum entry resolve phase in body resolve transformers --- .../FirDeclarationsResolveTransformer.kt | 2 ++ .../innerDeclarationsResolve/enum.fir.txt | 23 +++++++++++++++++++ .../testdata/innerDeclarationsResolve/enum.kt | 3 +++ ...DeclarationsResolvePhaseTestGenerated.java | 5 ++++ 4 files changed, 33 insertions(+) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.fir.txt create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.kt 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 f59b1d606f6..9f08fca91e0 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 @@ -115,6 +115,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): CompositeTransformResult { + if (enumEntry.resolvePhase == transformerPhase) return enumEntry.compose() + transformer.replaceDeclarationResolvePhaseIfNeeded(enumEntry, transformerPhase) context.withTowerDataMode(FirTowerDataMode.CONSTRUCTOR_HEADER) { return (enumEntry.transformChildren(this, data) as FirEnumEntry).compose() } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.fir.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.fir.txt new file mode 100644 index 00000000000..5c2ea128a6f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.fir.txt @@ -0,0 +1,23 @@ +FILE: enum.kt + public final [BODY_RESOLVE] enum class Enum : R|kotlin/Enum| { + private [BODY_RESOLVE] constructor([BODY_RESOLVE] x: R|kotlin/Int|): R|Enum| { + super|>() + } + + public final [BODY_RESOLVE] val x: R|kotlin/Int| = R|/x| + [BODY_RESOLVE] public get(): R|kotlin/Int| + + public final static [BODY_RESOLVE] enum entry A: R|Enum| = object : R|Enum| { + private [BODY_RESOLVE] constructor(): R|| { + super(Int(1)) + } + + } + + public final static [BODY_RESOLVE] fun values(): R|kotlin/Array| { + } + + public final static [BODY_RESOLVE] fun valueOf([BODY_RESOLVE] value: R|kotlin/String|): R|Enum| { + } + + } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.kt new file mode 100644 index 00000000000..76a0c2bdd60 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.kt @@ -0,0 +1,3 @@ +enum class Enum(val x: Int) { + A(1), +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/resolve/InnerDeclarationsResolvePhaseTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/resolve/InnerDeclarationsResolvePhaseTestGenerated.java index 908f2848cd1..def60bf3475 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/resolve/InnerDeclarationsResolvePhaseTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/resolve/InnerDeclarationsResolvePhaseTestGenerated.java @@ -44,6 +44,11 @@ public class InnerDeclarationsResolvePhaseTestGenerated extends AbstractInnerDec runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/constructorParameter.kt"); } + @TestMetadata("enum.kt") + public void testEnum() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/enum.kt"); + } + @TestMetadata("funWithoutTypes.kt") public void testFunWithoutTypes() throws Exception { runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/innerDeclarationsResolve/funWithoutTypes.kt");