[FIR] Change default visibility for sealed class constructors from private to public

This commit is contained in:
Dmitriy Novozhilov
2019-12-05 10:42:04 +03:00
parent d840671620
commit de77bd526b
6 changed files with 19 additions and 14 deletions
@@ -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,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|>()
}