FIR: Prettify visibility resolution for private constructors
This commit is contained in:
+7
-7
@@ -137,7 +137,6 @@ class FirStatusResolver(
|
|||||||
val visibility = when (status.visibility) {
|
val visibility = when (status.visibility) {
|
||||||
Visibilities.Unknown -> when {
|
Visibilities.Unknown -> when {
|
||||||
isLocal -> Visibilities.Local
|
isLocal -> Visibilities.Local
|
||||||
declaration is FirConstructor && containingClass is FirAnonymousObject -> Visibilities.Private
|
|
||||||
else -> resolveVisibility(declaration, containingClass, overriddenStatuses)
|
else -> resolveVisibility(declaration, containingClass, overriddenStatuses)
|
||||||
}
|
}
|
||||||
else -> status.visibility
|
else -> status.visibility
|
||||||
@@ -165,18 +164,19 @@ class FirStatusResolver(
|
|||||||
containingClass: FirClass<*>?,
|
containingClass: FirClass<*>?,
|
||||||
overriddenStatuses: List<FirResolvedDeclarationStatusImpl>
|
overriddenStatuses: List<FirResolvedDeclarationStatusImpl>
|
||||||
): Visibility {
|
): Visibility {
|
||||||
if (declaration is FirConstructor && containingClass != null) {
|
if (declaration is FirConstructor && containingClass?.hasPrivateConstructor() == true) return Visibilities.Private
|
||||||
val classKind = containingClass.classKind
|
|
||||||
if ((classKind == ClassKind.ENUM_CLASS || classKind == ClassKind.ENUM_ENTRY || containingClass.modality == Modality.SEALED)) {
|
|
||||||
return Visibilities.Private
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return overriddenStatuses.map { it.visibility }
|
return overriddenStatuses.map { it.visibility }
|
||||||
.maxWithOrNull { v1, v2 -> Visibilities.compare(v1, v2) ?: -1 }
|
.maxWithOrNull { v1, v2 -> Visibilities.compare(v1, v2) ?: -1 }
|
||||||
?.normalize()
|
?.normalize()
|
||||||
?: Visibilities.Public
|
?: 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(
|
private fun resolveModality(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration,
|
||||||
containingClass: FirClass<*>?,
|
containingClass: FirClass<*>?,
|
||||||
|
|||||||
Reference in New Issue
Block a user