FIR: support private-in-file effective visibility
This commit is contained in:
@@ -13,18 +13,21 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
|
||||
fun Visibility.toEffectiveVisibility(
|
||||
ownerSymbol: FirClassLikeSymbol<*>?,
|
||||
forClass: Boolean = false,
|
||||
checkPublishedApi: Boolean = false
|
||||
): EffectiveVisibility {
|
||||
return toEffectiveVisibility(ownerSymbol?.toLookupTag(), checkPublishedApi)
|
||||
return toEffectiveVisibility(ownerSymbol?.toLookupTag(), forClass, checkPublishedApi)
|
||||
}
|
||||
|
||||
fun Visibility.toEffectiveVisibility(
|
||||
owner: ConeClassLikeLookupTag?,
|
||||
forClass: Boolean = false,
|
||||
checkPublishedApi: Boolean = false
|
||||
): EffectiveVisibility {
|
||||
customEffectiveVisibility()?.let { return it }
|
||||
return when (this.normalize()) {
|
||||
Visibilities.Private, Visibilities.PrivateToThis, Visibilities.InvisibleFake -> EffectiveVisibility.PrivateInClass
|
||||
Visibilities.PrivateToThis, Visibilities.InvisibleFake -> EffectiveVisibility.PrivateInClass
|
||||
Visibilities.Private -> if (owner == null && forClass) EffectiveVisibility.PrivateInFile else EffectiveVisibility.PrivateInClass
|
||||
Visibilities.Protected -> EffectiveVisibility.Protected(owner)
|
||||
Visibilities.Internal -> when (!checkPublishedApi /*|| !owner.isPublishedApi()*/) { // TODO
|
||||
true -> EffectiveVisibility.Internal
|
||||
|
||||
+3
-1
@@ -168,7 +168,9 @@ class FirStatusResolver(
|
||||
containingClass is FirAnonymousObject -> EffectiveVisibility.Local
|
||||
else -> EffectiveVisibility.Public
|
||||
}
|
||||
val selfEffectiveVisibility = visibility.toEffectiveVisibility(containingClass?.symbol?.toLookupTag())
|
||||
val selfEffectiveVisibility = visibility.toEffectiveVisibility(
|
||||
containingClass?.symbol?.toLookupTag(), forClass = declaration is FirClass<*>
|
||||
)
|
||||
val effectiveVisibility = parentEffectiveVisibility.lowerBound(selfEffectiveVisibility, session.typeContext)
|
||||
return status.resolved(visibility, modality, effectiveVisibility)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user