Make DescriptorVisibility delegate to Visibility

This commit is contained in:
Dmitriy Novozhilov
2020-09-01 17:01:33 +03:00
parent a05d6da43b
commit 696f089b3e
14 changed files with 206 additions and 227 deletions
@@ -32,29 +32,34 @@ fun FunctionDescriptor.hasJavaOriginInHierarchy(): Boolean {
original.overriddenDescriptors.any { it.hasJavaOriginInHierarchy() }
}
fun DescriptorVisibility.isVisibleOutside() = this != DescriptorVisibilities.PRIVATE && this != DescriptorVisibilities.PRIVATE_TO_THIS && this != DescriptorVisibilities.INVISIBLE_FAKE
fun DescriptorVisibility.isVisibleOutside() =
this != DescriptorVisibilities.PRIVATE && this != DescriptorVisibilities.PRIVATE_TO_THIS && this != DescriptorVisibilities.INVISIBLE_FAKE
fun syntheticVisibility(originalDescriptor: DeclarationDescriptorWithVisibility, isUsedForExtension: Boolean): DescriptorVisibility {
val originalVisibility = originalDescriptor.visibility
return when (originalVisibility) {
return when (val originalVisibility = originalDescriptor.visibility) {
DescriptorVisibilities.PUBLIC -> DescriptorVisibilities.PUBLIC
else -> object : DescriptorVisibility(originalVisibility.name, originalVisibility.isPublicAPI) {
else -> object : DescriptorVisibility() {
override val delegate: Visibility
get() = originalVisibility.delegate
override fun isVisible(
receiver: ReceiverValue?,
what: DeclarationDescriptorWithVisibility,
from: DeclarationDescriptor
receiver: ReceiverValue?,
what: DeclarationDescriptorWithVisibility,
from: DeclarationDescriptor
) = originalVisibility.isVisible(
if (isUsedForExtension) DescriptorVisibilities.ALWAYS_SUITABLE_RECEIVER else receiver, originalDescriptor, from)
if (isUsedForExtension) DescriptorVisibilities.ALWAYS_SUITABLE_RECEIVER else receiver, originalDescriptor, from
)
override fun mustCheckInImports()
= throw UnsupportedOperationException("Should never be called for this visibility")
override fun mustCheckInImports() = throw UnsupportedOperationException("Should never be called for this visibility")
override fun normalize()
= originalVisibility.normalize()
override fun normalize() = originalVisibility.normalize()
override val internalDisplayName: String
get() = originalVisibility.internalDisplayName + " for synthetic extension"
override val externalDisplayName: String
get() = internalDisplayName
}
}
@@ -267,8 +267,8 @@ internal class InlineChecker(private val descriptor: FunctionDescriptor) : CallC
if (calledDescriptor !is ConstructorDescriptor &&
isInlineFunPublicOrPublishedApi &&
inlineFunEffectiveVisibility.toVisibility() !== DescriptorVisibilities.PROTECTED &&
calledFunEffectiveVisibility.toVisibility() === DescriptorVisibilities.PROTECTED) {
inlineFunEffectiveVisibility.toVisibility() !== Visibilities.Protected &&
calledFunEffectiveVisibility.toVisibility() === Visibilities.Protected) {
if (prohibitProtectedCallFromInline) {
context.trace.report(PROTECTED_CALL_FROM_PUBLIC_INLINE_ERROR.on(expression, calledDescriptor))
} else {
@@ -105,8 +105,8 @@ class ExplicitApiDeclarationChecker : DeclarationChecker {
val callableMemberDescriptor = descriptor as? CallableMemberDescriptor
val visibility = callableMemberDescriptor?.effectiveVisibility()?.toVisibility()
return (checkForPublicApi && visibility?.isPublicAPI == true) || (checkForInternal && visibility == DescriptorVisibilities.INTERNAL) ||
(checkForPrivate && visibility == DescriptorVisibilities.PRIVATE)
return (checkForPublicApi && visibility?.isPublicAPI == true) || (checkForInternal && visibility == Visibilities.Internal) ||
(checkForPrivate && visibility == Visibilities.Internal)
}
fun returnTypeCheckIsApplicable(element: KtCallableDeclaration): Boolean {