diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaVisibilities.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaVisibilities.java index 90042b9d511..14e96e61866 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaVisibilities.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaVisibilities.java @@ -63,9 +63,9 @@ public class JavaVisibilities { return Visibilities.PROTECTED; } - @NotNull + @Nullable @Override - public EffectiveVisibility effectiveVisibility(@NotNull DeclarationDescriptor classDescriptor, boolean checkPublishedApi) { + public EffectiveVisibility customEffectiveVisibility() { return EffectiveVisibility.PackagePrivate.INSTANCE; } }; diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibilityUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibilityUtils.kt index e6da9261d65..ffd26315ea1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibilityUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/EffectiveVisibilityUtils.kt @@ -9,8 +9,12 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isPublishedApi import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.checker.ClassicTypeCheckerContext -fun effectiveVisibility(visibility: Visibility, descriptor: DeclarationDescriptor, checkPublishedApi: Boolean = false) = - visibility.forVisibility(descriptor, checkPublishedApi) +fun Visibility.effectiveVisibility( + descriptor: DeclarationDescriptor, + checkPublishedApi: Boolean = false +): EffectiveVisibility { + return customEffectiveVisibility() ?: normalize().forVisibility(descriptor, checkPublishedApi) +} private fun Visibility.forVisibility(descriptor: DeclarationDescriptor, checkPublishedApi: Boolean = false): EffectiveVisibility = when (this) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt index 3a0794f2778..db1aefeef1d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.descriptors import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue abstract class Visibility protected constructor( - val name: String, - val isPublicAPI: Boolean + val name: String, + val isPublicAPI: Boolean ) { /** * @param receiver can be used to determine callee accessibility for some special receiver value @@ -64,10 +64,10 @@ abstract class Visibility protected constructor( open val externalDisplayName: String get() = internalDisplayName - override final fun toString() = internalDisplayName + final override fun toString() = internalDisplayName open fun normalize(): Visibility = this // Should be overloaded in Java visibilities - open fun effectiveVisibility(descriptor: DeclarationDescriptor, checkPublishedApi: Boolean) = effectiveVisibility(normalize(), descriptor, checkPublishedApi) + open fun customEffectiveVisibility(): EffectiveVisibility? = null } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/FunctionTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/FunctionTranslator.kt index 1578791ec4f..f812bbbdac1 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/FunctionTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/FunctionTranslator.kt @@ -133,7 +133,7 @@ private fun IncrementalResultsConsumer.reportInlineFunction( val psiFile = (descriptor.source.containingFile as? PsiSourceFile)?.psiFile ?: return val file = VfsUtilCore.virtualToIoFile(psiFile.virtualFile) - if (effectiveVisibility(descriptor.visibility, descriptor, true).privateApi) return + if (descriptor.visibility.effectiveVisibility(descriptor, true).privateApi) return val fqName = when (descriptor) { is PropertyGetterDescriptor -> { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 0755b8401e6..34d931a7c1f 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -447,7 +447,8 @@ public final class TranslationUtils { } DeclarationDescriptor container = descriptor.getContainingDeclaration(); - boolean isPublic = descriptor.getVisibility().effectiveVisibility(descriptor, true).getPublicApi() && !forcePrivate; + EffectiveVisibility effectiveVisibility = EffectiveVisibilityUtilsKt.effectiveVisibility(descriptor.getVisibility(), descriptor, true); + boolean isPublic = effectiveVisibility.getPublicApi() && !forcePrivate; if (KotlinBuiltIns.isCharOrNullableChar(returnType) && container instanceof ClassDescriptor && isPublic) { ClassDescriptor containingClass = (ClassDescriptor) container; FqNameUnsafe containingClassName = DescriptorUtilsKt.getFqNameUnsafe(containingClass);