[FIR] Change default visibility for sealed class constructors from private to public
This commit is contained in:
+5
-1
@@ -444,11 +444,15 @@ class Fir2IrDeclarationStorage(
|
||||
val descriptor = WrappedClassConstructorDescriptor()
|
||||
val origin = IrDeclarationOrigin.DEFINED
|
||||
val isPrimary = constructor.isPrimary
|
||||
val visibility = when {
|
||||
irParent is IrClass && irParent.modality == Modality.SEALED -> Visibilities.PRIVATE
|
||||
else -> constructor.visibility
|
||||
}
|
||||
val created = constructor.convertWithOffsets { startOffset, endOffset ->
|
||||
irSymbolTable.declareConstructor(startOffset, endOffset, origin, descriptor) { symbol ->
|
||||
IrConstructorImpl(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
constructor.name, constructor.visibility,
|
||||
constructor.name, visibility,
|
||||
constructor.returnTypeRef.toIrType(session, this),
|
||||
isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = false
|
||||
).bindAndDeclareParameters(constructor, descriptor, irParent, isStatic = true, shouldLeaveScope = shouldLeaveScope)
|
||||
|
||||
@@ -53,10 +53,11 @@ class ClassWrapper(
|
||||
}
|
||||
|
||||
fun defaultConstructorVisibility(): Visibility {
|
||||
return if (isObject() || isSealed() || isEnum())
|
||||
Visibilities.PRIVATE
|
||||
else
|
||||
Visibilities.UNKNOWN
|
||||
return when {
|
||||
isObject() || isEnum() -> Visibilities.PRIVATE
|
||||
isSealed() -> Visibilities.PUBLIC
|
||||
else -> Visibilities.UNKNOWN
|
||||
}
|
||||
}
|
||||
|
||||
fun getFirUserTypeFromClassName(): FirUserTypeRef {
|
||||
|
||||
@@ -405,12 +405,12 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
}
|
||||
}
|
||||
|
||||
fun defaultVisibility() =
|
||||
if (owner is KtObjectDeclaration || owner.hasModifier(SEALED_KEYWORD) || owner.hasModifier(ENUM_KEYWORD))
|
||||
// TODO: sealed is FILE_PRIVATE (?) object / enum is HIDDEN (?)
|
||||
Visibilities.PRIVATE
|
||||
else
|
||||
Visibilities.UNKNOWN
|
||||
fun defaultVisibility() = when {
|
||||
// TODO: object / enum is HIDDEN (?)
|
||||
owner is KtObjectDeclaration || owner.hasModifier(ENUM_KEYWORD) -> Visibilities.PRIVATE
|
||||
owner.hasModifier(SEALED_KEYWORD) -> Visibilities.PUBLIC
|
||||
else -> Visibilities.UNKNOWN
|
||||
}
|
||||
|
||||
val status = FirDeclarationStatusImpl(this?.visibility ?: defaultVisibility(), Modality.FINAL).apply {
|
||||
isExpect = this@toFirConstructor?.hasExpectModifier() ?: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
FILE: exhaustiveness_sealedClass.kt
|
||||
public sealed class Base : R|kotlin/Any| {
|
||||
private constructor(): R|Base| {
|
||||
public constructor(): R|Base| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
FILE: test.kt
|
||||
public sealed class Test : R|kotlin/Any| {
|
||||
private constructor(): R|test/Test| {
|
||||
public constructor(): R|test/Test| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
FILE: recursiveCallOnWhenWithSealedClass.kt
|
||||
public sealed class Maybe<T> : R|kotlin/Any| {
|
||||
private constructor<T>(): R|Maybe<T>| {
|
||||
public constructor<T>(): R|Maybe<T>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user