FIR: don't allow SEALED callable modality anymore
This commit is contained in:
committed by
TeamCityServer
parent
67d1c35f19
commit
4608ca15eb
+5
-5
@@ -397,7 +397,7 @@ class DeclarationsConverter(
|
|||||||
withCapturedTypeParameters {
|
withCapturedTypeParameters {
|
||||||
val status = FirDeclarationStatusImpl(
|
val status = FirDeclarationStatusImpl(
|
||||||
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
|
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
|
||||||
modifiers.getModality()
|
modifiers.getModality(isClassOrObject = true)
|
||||||
).apply {
|
).apply {
|
||||||
isExpect = modifiers.hasExpect()
|
isExpect = modifiers.hasExpect()
|
||||||
isActual = modifiers.hasActual()
|
isActual = modifiers.hasActual()
|
||||||
@@ -1070,7 +1070,7 @@ class DeclarationsConverter(
|
|||||||
|
|
||||||
fun defaultAccessorStatus() =
|
fun defaultAccessorStatus() =
|
||||||
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
// 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()
|
isInline = modifiers.hasInline()
|
||||||
isExternal = modifiers.hasExternal()
|
isExternal = modifiers.hasExternal()
|
||||||
}
|
}
|
||||||
@@ -1097,7 +1097,7 @@ class DeclarationsConverter(
|
|||||||
// Upward propagation of `inline` and `external` modifiers (from accessors to property)
|
// 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
|
// 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`
|
// 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
|
isExpect = modifiers.hasExpect() || classWrapper?.hasExpect() == true
|
||||||
isActual = modifiers.hasActual()
|
isActual = modifiers.hasActual()
|
||||||
isOverride = modifiers.hasOverride()
|
isOverride = modifiers.hasOverride()
|
||||||
@@ -1218,7 +1218,7 @@ class DeclarationsConverter(
|
|||||||
}
|
}
|
||||||
val status =
|
val status =
|
||||||
// Downward propagation of `inline` and `external` modifiers (from property to its accessors)
|
// 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()
|
isInline = propertyModifiers.hasInline() || modifiers.hasInline()
|
||||||
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
||||||
}
|
}
|
||||||
@@ -1388,7 +1388,7 @@ class DeclarationsConverter(
|
|||||||
name = functionName
|
name = functionName
|
||||||
status = FirDeclarationStatusImpl(
|
status = FirDeclarationStatusImpl(
|
||||||
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
|
if (isLocal) Visibilities.Local else modifiers.getVisibility(),
|
||||||
modifiers.getModality()
|
modifiers.getModality(isClassOrObject = false)
|
||||||
).apply {
|
).apply {
|
||||||
isExpect = modifiers.hasExpect() || classWrapper?.hasExpect() == true
|
isExpect = modifiers.hasExpect() || classWrapper?.hasExpect() == true
|
||||||
isActual = modifiers.hasActual()
|
isActual = modifiers.hasActual()
|
||||||
|
|||||||
+1
-1
@@ -66,7 +66,7 @@ class ValueParameter(
|
|||||||
symbol = FirPropertySymbol(callableId)
|
symbol = FirPropertySymbol(callableId)
|
||||||
dispatchReceiverType = currentDispatchReceiver
|
dispatchReceiverType = currentDispatchReceiver
|
||||||
isLocal = false
|
isLocal = false
|
||||||
status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality()).apply {
|
status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality(isClassOrObject = false)).apply {
|
||||||
this.isExpect = isExpect
|
this.isExpect = isExpect
|
||||||
isActual = modifiers.hasActual()
|
isActual = modifiers.hasActual()
|
||||||
isOverride = modifiers.hasOverride()
|
isOverride = modifiers.hasOverride()
|
||||||
|
|||||||
+2
-2
@@ -146,10 +146,10 @@ class Modifier(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getModality(): Modality? {
|
fun getModality(isClassOrObject: Boolean): Modality? {
|
||||||
return when {
|
return when {
|
||||||
inheritanceModifiers.contains(InheritanceModifier.FINAL) -> Modality.FINAL
|
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.ABSTRACT) -> Modality.ABSTRACT
|
||||||
inheritanceModifiers.contains(InheritanceModifier.OPEN) -> Modality.OPEN
|
inheritanceModifiers.contains(InheritanceModifier.OPEN) -> Modality.OPEN
|
||||||
else -> null
|
else -> null
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ open class RawFirBuilder(
|
|||||||
when {
|
when {
|
||||||
this == null -> null
|
this == null -> null
|
||||||
hasModifier(FINAL_KEYWORD) -> Modality.FINAL
|
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
|
hasModifier(ABSTRACT_KEYWORD) -> Modality.ABSTRACT
|
||||||
else -> if (hasModifier(OPEN_KEYWORD)) Modality.OPEN else null
|
else -> if (hasModifier(OPEN_KEYWORD)) Modality.OPEN else null
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ interface B {
|
|||||||
abstract var bar: Unit
|
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 class D(sealed var x: Int) {
|
||||||
abstract var y: Unit
|
abstract var y: Unit
|
||||||
|
|||||||
Reference in New Issue
Block a user