From 2e2edf398cce110c9b074571b5a4af42a939a81d Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 9 Aug 2021 13:13:16 +0300 Subject: [PATCH] FIR: consider enum class overridden members non-final #KT-48164 Fixed --- .../intellij/EnumWithToString.fir.txt | 28 +++++++++++++++++++ .../intellij/EnumWithToString.kt | 7 +++++ .../runners/FirDiagnosticTestGenerated.java | 6 ++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++ .../resolve/transformers/FirStatusResolver.kt | 8 +++++- ...nosisCompilerFirTestdataTestGenerated.java | 6 ++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.fir.txt new file mode 100644 index 00000000000..cde4807700e --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.fir.txt @@ -0,0 +1,28 @@ +FILE: EnumWithToString.kt + public final enum class Some : R|kotlin/Enum| { + private constructor(): R|Some| { + super|>() + } + + public final static enum entry ENTRY: R|Some| = object : R|Some| { + private constructor(): R|| { + super() + } + + public final override fun toString(): R|kotlin/String| { + ^toString String(Entry) + } + + } + + public open override fun toString(): R|kotlin/String| { + ^toString String(Some) + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|Some| { + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt new file mode 100644 index 00000000000..e8a09b34c7b --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt @@ -0,0 +1,7 @@ +enum class Some { + ENTRY { + override fun toString(): String = "Entry" + }; + + override fun toString(): String = "Some" +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index f865dfbe335..b35c3f24252 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -5038,6 +5038,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { public void testDailyAggregatedDoubleFactor() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/DailyAggregatedDoubleFactor.kt"); } + + @Test + @TestMetadata("EnumWithToString.kt") + public void testEnumWithToString() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt"); + } } @Nested diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 3941849cfaf..8256bf9f9f0 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -5038,6 +5038,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos public void testDailyAggregatedDoubleFactor() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/DailyAggregatedDoubleFactor.kt"); } + + @Test + @TestMetadata("EnumWithToString.kt") + public void testEnumWithToString() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt"); + } } @Nested diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt index 98902f0b289..155735d0603 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt @@ -258,7 +258,13 @@ class FirStatusResolver( } } else -> { - if (declaration.isOverride && containingClass.modality != Modality.FINAL) Modality.OPEN else Modality.FINAL + if (declaration.isOverride && + (containingClass.modality != Modality.FINAL || containingClass.classKind == ClassKind.ENUM_CLASS) + ) { + Modality.OPEN + } else { + Modality.FINAL + } } } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 6a824e05ba3..11f3a1dfa09 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -5038,6 +5038,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis public void testDailyAggregatedDoubleFactor() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/DailyAggregatedDoubleFactor.kt"); } + + @Test + @TestMetadata("EnumWithToString.kt") + public void testEnumWithToString() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/intellij/EnumWithToString.kt"); + } } @Nested