diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/SignatureDumpingBuilderFactory.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/SignatureDumpingBuilderFactory.kt index ab8eb2c51db..ee1044a1070 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/SignatureDumpingBuilderFactory.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/SignatureDumpingBuilderFactory.kt @@ -101,7 +101,7 @@ class SignatureDumpingBuilderFactory( origin.descriptor?.let { outputStream.append("\t\t").appendNameValue("declaration", TYPE_RENDERER.render(it)).append(",\n") (it as? DeclarationDescriptorWithVisibility)?.visibility?.let { - outputStream.append("\t\t").appendNameValue("visibility", it.displayName).append(",\n") + outputStream.append("\t\t").appendNameValue("visibility", it.internalDisplayName).append(",\n") } } outputStream.append("\t\t").appendNameValue("class", javaClassName).append(",\n") @@ -112,7 +112,7 @@ class SignatureDumpingBuilderFactory( append("\t\t\t{") descriptor?.let { (it as? DeclarationDescriptorWithVisibility)?.visibility?.let { - appendNameValue("visibility", it.displayName).append(",\t") + appendNameValue("visibility", it.internalDisplayName).append(",\t") } appendNameValue("declaration", MEMBER_RENDERER.render(it)).append(", ") diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index 6da87e893f0..734447fef29 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -9062,6 +9062,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility.kt"); } + @TestMetadata("CheckJavaVisibility2.kt") + public void testCheckJavaVisibility2() throws Exception { + runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt"); + } + @TestMetadata("CheckVisibility.kt") public void testCheckVisibility() throws Exception { runTest("compiler/testData/diagnostics/tests/imports/CheckVisibility.kt"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt index f6cb6a573f8..f30697a87ab 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/syntheticExtensionsUtils.kt @@ -53,8 +53,8 @@ fun syntheticVisibility(originalDescriptor: DeclarationDescriptorWithVisibility, override fun normalize() = originalVisibility.normalize() - override val displayName: String - get() = originalVisibility.displayName + " for synthetic extension" + override val internalDisplayName: String + get() = originalVisibility.internalDisplayName + " for synthetic extension" } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt index ecce7d54318..655732f8649 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -20,15 +20,12 @@ import com.google.common.collect.Lists import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.moduleInfo import org.jetbrains.kotlin.analyzer.unwrapPlatform import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cfg.WhenMissingCase import org.jetbrains.kotlin.cfg.hasUnknown -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newTable import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newText @@ -39,7 +36,6 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer.Companion.DEBUG_TEXT import org.jetbrains.kotlin.renderer.PropertyAccessorRenderingPolicy import org.jetbrains.kotlin.resolve.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.inference.* import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.Bound import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.BoundKind.LOWER_BOUND @@ -48,11 +44,8 @@ import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.Constrain import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.* import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.getValidityConstraintForConstituentType import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.checker.KotlinTypeChecker -import org.jetbrains.kotlin.types.expressions.typeInfoFactory.noTypeInfo import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.io.PrintWriter import java.io.StringWriter @@ -97,9 +90,7 @@ object Renderers { @JvmField val VISIBILITY = Renderer { - if (it == Visibilities.INVISIBLE_FAKE) - "invisible (private in a supertype)" - else it.displayName + it.externalDisplayName } @JvmField diff --git a/compiler/testData/cli/jvm/singleJavaFileRoots.out b/compiler/testData/cli/jvm/singleJavaFileRoots.out index 876eb60bcb6..94eb38b7eef 100644 --- a/compiler/testData/cli/jvm/singleJavaFileRoots.out +++ b/compiler/testData/cli/jvm/singleJavaFileRoots.out @@ -4,10 +4,10 @@ compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:7:9: error: cannot access compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:8:5: error: unresolved reference: C C().a() ^ -compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:12:5: error: cannot access '': it is public/*package*/ in 'PackageLocal1' +compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:12:5: error: cannot access '': it is package-private in 'PackageLocal1' PackageLocal1() ^ -compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:13:5: error: cannot access '': it is public/*package*/ in 'PackageLocal2' +compiler/testData/cli/jvm/singleJavaFileRoots/test.kt:13:5: error: cannot access '': it is package-private in 'PackageLocal2' PackageLocal2() ^ COMPILATION_ERROR diff --git a/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt b/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt new file mode 100644 index 00000000000..16f5465c871 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt @@ -0,0 +1,62 @@ +// FILE: j/JavaPackageLocal.java +package j; + +public class JavaPackageLocal { + static void javaMPackage() {} + static int javaPPackage = 4; +} + +// FILE: j/JavaProtected.java +package j; + +public class JavaProtected { + protected static void javaMProtectedStatic() {} + protected static int javaPProtectedStatic = 4; + protected final int javaPProtectedPackage = 4; +} + +// FILE: k.kt +package k + +import j.JavaProtected +import j.JavaPackageLocal + +class A { + val p1 = JavaPackageLocal.javaPPackage + val p2 = JavaProtected.javaPProtectedStatic + val p3 = JavaProtected().javaPProtectedPackage + + fun test() { + JavaProtected.javaMProtectedStatic() + JavaPackageLocal.javaMPackage() + } +} + +class B : JavaProtected() { + val p1 = JavaPackageLocal.javaPPackage + val p2 = JavaProtected.javaPProtectedStatic + val p3 = javaPProtectedPackage + + fun test() { + JavaProtected.javaMProtectedStatic() + JavaPackageLocal.javaMPackage() + } +} + +// FILE: j.kt +package j + +import j.JavaProtected +import j.JavaPackageLocal + +class C { + val p1 = JavaPackageLocal.javaPPackage + val p2 = JavaProtected.javaPProtectedStatic + val p3 = JavaProtected().javaPProtectedPackage + + fun test() { + JavaProtected.javaMProtectedStatic() + JavaProtected.javaMProtectedStatic() + JavaPackageLocal.javaMPackage() + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.txt b/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.txt new file mode 100644 index 00000000000..dd9be0629d8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.txt @@ -0,0 +1,64 @@ +package + +package j { + + public final class C { + public constructor C() + public final val p1: kotlin.Int + public final val p2: kotlin.Int + public final val p3: kotlin.Int = 4 + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final fun test(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public open class JavaPackageLocal { + public constructor JavaPackageLocal() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public/*package*/ final var javaPPackage: kotlin.Int + public/*package*/ open fun javaMPackage(): kotlin.Unit + } + + public open class JavaProtected { + public constructor JavaProtected() + protected/*protected and package*/ final val javaPProtectedPackage: kotlin.Int = 4 + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + protected/*protected static*/ final var javaPProtectedStatic: kotlin.Int + protected/*protected static*/ open fun javaMProtectedStatic(): kotlin.Unit + } +} + +package k { + + public final class A { + public constructor A() + public final val p1: kotlin.Int + public final val p2: kotlin.Int + public final val p3: kotlin.Int = 4 + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final fun test(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + public final class B : j.JavaProtected { + public constructor B() + protected/*protected and package*/ final override /*1*/ /*fake_override*/ val javaPProtectedPackage: kotlin.Int + public final val p1: kotlin.Int + public final val p2: kotlin.Int + public final val p3: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final fun test(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 2d70a6ad65c..4e285245101 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -9069,6 +9069,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility.kt"); } + @TestMetadata("CheckJavaVisibility2.kt") + public void testCheckJavaVisibility2() throws Exception { + runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt"); + } + @TestMetadata("CheckVisibility.kt") public void testCheckVisibility() throws Exception { runTest("compiler/testData/diagnostics/tests/imports/CheckVisibility.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 7fdd37091ce..9e94ea9f3bd 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -9064,6 +9064,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility.kt"); } + @TestMetadata("CheckJavaVisibility2.kt") + public void testCheckJavaVisibility2() throws Exception { + runTest("compiler/testData/diagnostics/tests/imports/CheckJavaVisibility2.kt"); + } + @TestMetadata("CheckVisibility.kt") public void testCheckVisibility() throws Exception { runTest("compiler/testData/diagnostics/tests/imports/CheckVisibility.kt"); 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 eb7e761719b..90042b9d511 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 @@ -47,10 +47,16 @@ public class JavaVisibilities { @NotNull @Override - public String getDisplayName() { + public String getInternalDisplayName() { return "public/*package*/"; } + @NotNull + @Override + public String getExternalDisplayName() { + return "package-private"; + } + @NotNull @Override public Visibility normalize() { @@ -78,10 +84,16 @@ public class JavaVisibilities { @NotNull @Override - public String getDisplayName() { + public String getInternalDisplayName() { return "protected/*protected static*/"; } + @NotNull + @Override + public String getExternalDisplayName() { + return "protected"; + } + @NotNull @Override public Visibility normalize() { @@ -111,10 +123,16 @@ public class JavaVisibilities { @NotNull @Override - public String getDisplayName() { + public String getInternalDisplayName() { return "protected/*protected and package*/"; } + @NotNull + @Override + public String getExternalDisplayName() { + return "protected"; + } + @NotNull @Override public Visibility normalize() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java index 1a4d05d319e..945ef2dec5e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java @@ -126,7 +126,7 @@ public class Visibilities { @NotNull @Override - public String getDisplayName() { + public String getInternalDisplayName() { return "private/*private to this*/"; } }; @@ -270,6 +270,12 @@ public class Visibilities { public boolean isVisible(@Nullable ReceiverValue receiver, @NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) { return false; } + + @Override + @NotNull + public String getExternalDisplayName() { + return "invisible (private in a supertype)"; + } }; // Currently used as default visibility of FunctionDescriptor diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt index 6b10017ff64..7da0c6541de 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibility.kt @@ -56,10 +56,23 @@ abstract class Visibility protected constructor( return Visibilities.compareLocal(this, visibility) } - open val displayName: String + // internal representation for descriptors + open val internalDisplayName: String get() = name - override final fun toString() = displayName + // external representation for diagnostics + open val externalDisplayName: String + get() = internalDisplayName + + @Deprecated( + "Visibility.displayName is deprecated, use internalDisplayName instead", + ReplaceWith("internalDisplayName"), + level = DeprecationLevel.WARNING + ) + open val displayName: String + get() = internalDisplayName + + override final fun toString() = internalDisplayName open fun normalize(): Visibility = this diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 9aff880f081..05aca0aa07b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -481,7 +481,7 @@ internal class DescriptorRendererImpl( visibility = visibility.normalize() } if (!renderDefaultVisibility && visibility == Visibilities.DEFAULT_VISIBILITY) return false - builder.append(renderKeyword(visibility.displayName)).append(" ") + builder.append(renderKeyword(visibility.internalDisplayName)).append(" ") return true } diff --git a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivateNonRoot/build.log b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivateNonRoot/build.log index 6e69a8d9da1..9288d829053 100644 --- a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivateNonRoot/build.log +++ b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/changeSignaturePackagePrivateNonRoot/build.log @@ -18,4 +18,4 @@ End of files Exit code: ABORT ------------------------------------------ COMPILATION FAILED -Cannot access 'foo': it is public/*package*/ in 'JavaClass' \ No newline at end of file +Cannot access 'foo': it is package-private in 'JavaClass' \ No newline at end of file