FIR: Prettify visibility resolution for private constructors

This commit is contained in:
Denis.Zharkov
2021-02-20 13:35:36 +03:00
parent 9d7e40ad99
commit ace66b7179
@@ -137,7 +137,6 @@ class FirStatusResolver(
val visibility = when (status.visibility) {
Visibilities.Unknown -> when {
isLocal -> Visibilities.Local
declaration is FirConstructor && containingClass is FirAnonymousObject -> Visibilities.Private
else -> resolveVisibility(declaration, containingClass, overriddenStatuses)
}
else -> status.visibility
@@ -165,18 +164,19 @@ class FirStatusResolver(
containingClass: FirClass<*>?,
overriddenStatuses: List<FirResolvedDeclarationStatusImpl>
): Visibility {
if (declaration is FirConstructor && containingClass != null) {
val classKind = containingClass.classKind
if ((classKind == ClassKind.ENUM_CLASS || classKind == ClassKind.ENUM_ENTRY || containingClass.modality == Modality.SEALED)) {
return Visibilities.Private
}
}
if (declaration is FirConstructor && containingClass?.hasPrivateConstructor() == true) return Visibilities.Private
return overriddenStatuses.map { it.visibility }
.maxWithOrNull { v1, v2 -> Visibilities.compare(v1, v2) ?: -1 }
?.normalize()
?: Visibilities.Public
}
private fun FirClass<*>.hasPrivateConstructor(): Boolean {
val classKind = classKind
return classKind == ClassKind.ENUM_CLASS || classKind == ClassKind.ENUM_ENTRY || modality == Modality.SEALED || this is FirAnonymousObject
}
private fun resolveModality(
declaration: FirDeclaration,
containingClass: FirClass<*>?,