From 55c1addb938a416d797cc58dbb6902d7fd28139a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 27 Oct 2015 15:27:28 +0300 Subject: [PATCH] Workaround for a part of KT-9700: top-level Java classes with private visibility are considered package private --- .../java/lazy/descriptors/LazyJavaClassDescriptor.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 63a066ccacd..7460e3aacbb 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorBase import org.jetbrains.kotlin.load.java.FakePureImplementationsProvider +import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.components.TypeUsage import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor @@ -71,7 +72,16 @@ class LazyJavaClassDescriptor( override fun getKind() = kind override fun getModality() = modality - override fun getVisibility() = visibility + + // To workaround a problem with Scala compatibility (KT-9700), + // we consider private visibility of a Java top level class as package private + // Shortly: Scala plugin introduces special kind of "private in package" classes + // which can be inherited from the same package. + // Kotlin considers this "private in package" just as "private" and thinks they are invisible for inheritors, + // so their functions are invisible fake which is not true. + override fun getVisibility() = + if (visibility == Visibilities.PRIVATE && jClass.outerClass == null) JavaVisibilities.PACKAGE_VISIBILITY else visibility + override fun isInner() = isInner override fun isData() = false