FIR: don't allow SEALED callable modality anymore

This commit is contained in:
Mikhail Glukhikh
2021-05-11 15:23:45 +03:00
committed by TeamCityServer
parent 67d1c35f19
commit 4608ca15eb
5 changed files with 10 additions and 10 deletions
@@ -397,7 +397,7 @@ class DeclarationsConverter(
withCapturedTypeParameters {
val status = FirDeclarationStatusImpl(
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
modifiers.getModality()
modifiers.getModality(isClassOrObject = true)
).apply {
isExpect = modifiers.hasExpect()
isActual = modifiers.hasActual()
@@ -1070,7 +1070,7 @@ class DeclarationsConverter(
fun defaultAccessorStatus() =
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
FirDeclarationStatusImpl(propertyVisibility, modifiers.getModality()).apply {
FirDeclarationStatusImpl(propertyVisibility, modifiers.getModality(isClassOrObject = false)).apply {
isInline = modifiers.hasInline()
isExternal = modifiers.hasExternal()
}
@@ -1097,7 +1097,7 @@ class DeclarationsConverter(
// Upward propagation of `inline` and `external` modifiers (from accessors to property)
// Note that, depending on `var` or `val`, checking setter's modifiers should be careful: for `val`, setter doesn't
// exist (null); for `var`, the retrieval of the specific modifier is supposed to be `true`
status = FirDeclarationStatusImpl(propertyVisibility, modifiers.getModality()).apply {
status = FirDeclarationStatusImpl(propertyVisibility, modifiers.getModality(isClassOrObject = false)).apply {
isExpect = modifiers.hasExpect() || classWrapper?.hasExpect() == true
isActual = modifiers.hasActual()
isOverride = modifiers.hasOverride()
@@ -1218,7 +1218,7 @@ class DeclarationsConverter(
}
val status =
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
FirDeclarationStatusImpl(accessorVisibility, modifiers.getModality()).apply {
FirDeclarationStatusImpl(accessorVisibility, modifiers.getModality(isClassOrObject = false)).apply {
isInline = propertyModifiers.hasInline() || modifiers.hasInline()
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
}
@@ -1388,7 +1388,7 @@ class DeclarationsConverter(
name = functionName
status = FirDeclarationStatusImpl(
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
modifiers.getModality()
modifiers.getModality(isClassOrObject = false)
).apply {
isExpect = modifiers.hasExpect() || classWrapper?.hasExpect() == true
isActual = modifiers.hasActual()
@@ -66,7 +66,7 @@ class ValueParameter(
symbol = FirPropertySymbol(callableId)
dispatchReceiverType = currentDispatchReceiver
isLocal = false
status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality()).apply {
status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality(isClassOrObject = false)).apply {
this.isExpect = isExpect
isActual = modifiers.hasActual()
isOverride = modifiers.hasOverride()
@@ -146,10 +146,10 @@ class Modifier(
}
}
fun getModality(): Modality? {
fun getModality(isClassOrObject: Boolean): Modality? {
return when {
inheritanceModifiers.contains(InheritanceModifier.FINAL) -> Modality.FINAL
inheritanceModifiers.contains(InheritanceModifier.SEALED) -> Modality.SEALED
inheritanceModifiers.contains(InheritanceModifier.SEALED) -> if (isClassOrObject) Modality.SEALED else null
inheritanceModifiers.contains(InheritanceModifier.ABSTRACT) -> Modality.ABSTRACT
inheritanceModifiers.contains(InheritanceModifier.OPEN) -> Modality.OPEN
else -> null
@@ -148,7 +148,7 @@ open class RawFirBuilder(
when {
this == null -> null
hasModifier(FINAL_KEYWORD) -> Modality.FINAL
hasModifier(SEALED_KEYWORD) -> Modality.SEALED
hasModifier(SEALED_KEYWORD) -> if (this@modality is KtClassOrObject) Modality.SEALED else null
hasModifier(ABSTRACT_KEYWORD) -> Modality.ABSTRACT
else -> if (hasModifier(OPEN_KEYWORD)) Modality.OPEN else null
}
@@ -8,7 +8,7 @@ interface B {
abstract var bar: Unit
}
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface C<!> : A, B
interface C : A, B
abstract class D(sealed var x: Int) {
abstract var y: Unit