From 9044dfe394287dc315cf30c7b93e874e53a8704c Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Thu, 6 Apr 2023 10:11:41 +0200 Subject: [PATCH] [FE] Revert prohibition of protected members inside actual final classes ^KT-28850 Fixed --- .../declaration/FirModifierChecker.kt | 8 +++---- .../kotlin/resolve/ModifiersChecker.kt | 8 +++---- .../modifiers/protectedInExpectActual.kt | 24 +++++-------------- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt index f0bd185cfcc..7aa2af2e2c6 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt @@ -250,12 +250,12 @@ object FirModifierChecker : FirBasicDeclarationChecker() { return true } - if (modifierToken == KtTokens.PROTECTED_KEYWORD && isFinalExpectOrActualClass(parent)) { + if (modifierToken == KtTokens.PROTECTED_KEYWORD && isFinalExpectClass(parent)) { reporter.reportOn( modifierSource, FirErrors.WRONG_MODIFIER_CONTAINING_DECLARATION, modifierToken, - "final expect or actual class", + "final expect class", context, ) } @@ -277,7 +277,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() { return firstOrNull()?.description ?: "this" } - private fun isFinalExpectOrActualClass(d: FirDeclaration?): Boolean { - return d is FirClass && d.isFinal && (d.isExpect || d.isActual) + private fun isFinalExpectClass(d: FirDeclaration?): Boolean { + return d is FirClass && d.isFinal && d.isExpect } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index 965cfe8801d..5a7039c6945 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -180,12 +180,12 @@ object ModifierCheckerCore { ) return true } - if (modifier == PROTECTED_KEYWORD && isFinalExpectOrActualClass(parentDescriptor)) { + if (modifier == PROTECTED_KEYWORD && isFinalExpectClass(parentDescriptor)) { trace.report( Errors.WRONG_MODIFIER_CONTAINING_DECLARATION.on( node.psi, modifier, - "final expect or actual class" + "final expect class" ) ) } @@ -247,7 +247,7 @@ object ModifierCheckerCore { return true } - private fun isFinalExpectOrActualClass(d: DeclarationDescriptor?): Boolean { - return d is ClassDescriptor && d.isFinalOrEnum && (d.isExpect || d.isActual) + private fun isFinalExpectClass(d: DeclarationDescriptor?): Boolean { + return d is ClassDescriptor && d.isFinalOrEnum && d.isExpect } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/modifiers/protectedInExpectActual.kt b/compiler/testData/diagnostics/tests/modifiers/protectedInExpectActual.kt index f8529688ce4..02c1761d3e4 100644 --- a/compiler/testData/diagnostics/tests/modifiers/protectedInExpectActual.kt +++ b/compiler/testData/diagnostics/tests/modifiers/protectedInExpectActual.kt @@ -6,25 +6,21 @@ class SimpleClass { } expect class ExpClass { - protected fun foo() + protected fun foo() - protected val bar: Int + protected val bar: Int } actual class ActClass { - actual protected fun foo() = Unit + actual protected fun foo() = Unit - actual protected val bar: Int = 42 + actual protected val bar: Int = 42 } expect open class ExpOpenClass { protected fun foo() } -actual open class ActOpenClass { - actual protected fun foo() = Unit -} - enum class SimpleEnum { ENTRY; @@ -34,15 +30,7 @@ enum class SimpleEnum { expect enum class ExpEnumClass { ENTRY; - protected fun foo() + protected fun foo() - protected val bar: Int -} - -actual enum class ActEnumClass { - ENTRY; - - actual protected fun foo() = Unit - - protected val bar: Int = 42 + protected val bar: Int }