[FE] Revert prohibition of protected members inside actual final classes

^KT-28850 Fixed
This commit is contained in:
Roman Efremov
2023-04-06 10:11:41 +02:00
committed by Space Team
parent 88488f4dc9
commit 9044dfe394
3 changed files with 14 additions and 26 deletions
@@ -250,12 +250,12 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
return true return true
} }
if (modifierToken == KtTokens.PROTECTED_KEYWORD && isFinalExpectOrActualClass(parent)) { if (modifierToken == KtTokens.PROTECTED_KEYWORD && isFinalExpectClass(parent)) {
reporter.reportOn( reporter.reportOn(
modifierSource, modifierSource,
FirErrors.WRONG_MODIFIER_CONTAINING_DECLARATION, FirErrors.WRONG_MODIFIER_CONTAINING_DECLARATION,
modifierToken, modifierToken,
"final expect or actual class", "final expect class",
context, context,
) )
} }
@@ -277,7 +277,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() {
return firstOrNull()?.description ?: "this" return firstOrNull()?.description ?: "this"
} }
private fun isFinalExpectOrActualClass(d: FirDeclaration?): Boolean { private fun isFinalExpectClass(d: FirDeclaration?): Boolean {
return d is FirClass && d.isFinal && (d.isExpect || d.isActual) return d is FirClass && d.isFinal && d.isExpect
} }
} }
@@ -180,12 +180,12 @@ object ModifierCheckerCore {
) )
return true return true
} }
if (modifier == PROTECTED_KEYWORD && isFinalExpectOrActualClass(parentDescriptor)) { if (modifier == PROTECTED_KEYWORD && isFinalExpectClass(parentDescriptor)) {
trace.report( trace.report(
Errors.WRONG_MODIFIER_CONTAINING_DECLARATION.on( Errors.WRONG_MODIFIER_CONTAINING_DECLARATION.on(
node.psi, node.psi,
modifier, modifier,
"final expect or actual class" "final expect class"
) )
) )
} }
@@ -247,7 +247,7 @@ object ModifierCheckerCore {
return true return true
} }
private fun isFinalExpectOrActualClass(d: DeclarationDescriptor?): Boolean { private fun isFinalExpectClass(d: DeclarationDescriptor?): Boolean {
return d is ClassDescriptor && d.isFinalOrEnum && (d.isExpect || d.isActual) return d is ClassDescriptor && d.isFinalOrEnum && d.isExpect
} }
} }
@@ -6,25 +6,21 @@ class SimpleClass {
} }
expect class ExpClass { expect class ExpClass {
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> fun foo() <!WRONG_MODIFIER_CONTAINING_DECLARATION("protected; final expect class")!>protected<!> fun foo()
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> val bar: Int <!WRONG_MODIFIER_CONTAINING_DECLARATION("protected; final expect class")!>protected<!> val bar: Int
} }
actual class ActClass { actual class ActClass {
actual <!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> fun foo() = Unit actual protected fun foo() = Unit
actual <!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> val bar: Int = 42 actual protected val bar: Int = 42
} }
expect open class ExpOpenClass { expect open class ExpOpenClass {
protected fun foo() protected fun foo()
} }
actual open class ActOpenClass {
actual protected fun foo() = Unit
}
enum class SimpleEnum { enum class SimpleEnum {
ENTRY; ENTRY;
@@ -34,15 +30,7 @@ enum class SimpleEnum {
expect enum class ExpEnumClass { expect enum class ExpEnumClass {
ENTRY; ENTRY;
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> fun foo() <!WRONG_MODIFIER_CONTAINING_DECLARATION("protected; final expect class")!>protected<!> fun foo()
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> val bar: Int <!WRONG_MODIFIER_CONTAINING_DECLARATION("protected; final expect class")!>protected<!> val bar: Int
}
actual enum class ActEnumClass {
ENTRY;
actual <!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> fun foo() = Unit
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> val bar: Int = 42
} }