[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
}
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
}
}
@@ -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
}
}
@@ -6,25 +6,21 @@ class SimpleClass {
}
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 <!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 {
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;
<!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
}
actual enum class ActEnumClass {
ENTRY;
actual <!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> fun foo() = Unit
<!WRONG_MODIFIER_CONTAINING_DECLARATION!>protected<!> val bar: Int = 42
<!WRONG_MODIFIER_CONTAINING_DECLARATION("protected; final expect class")!>protected<!> val bar: Int
}