From ea11133142bf7ef6f8ce4d70f771c3eed781b02f Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Tue, 8 Sep 2015 05:12:41 +0300 Subject: [PATCH] strict checking for internal visibility --- .../diagnostics/tests/multimodule/internal.kt | 32 +++++++++---------- .../tests/multimodule/internal.txt | 26 ++++++++------- .../kotlin/descriptors/Visibilities.java | 4 +-- .../multiModuleHighlighting/testRoot/m1/m1.kt | 2 +- .../testRoot/m1Test/m1Test.kt | 2 +- .../multiModuleHighlighting/testRoot/m2/m2.kt | 4 +-- .../testRoot/m2Test/m2Test.kt | 6 ++-- .../multiModuleHighlighting/testRoot/m3/m3.kt | 2 +- .../testRoot/m3Test/m3Test.kt | 10 +++--- .../visibility/m1/m1.kt | 6 ++-- .../visibility/m2/m2.kt | 10 +++--- 11 files changed, 53 insertions(+), 51 deletions(-) diff --git a/compiler/testData/diagnostics/tests/multimodule/internal.kt b/compiler/testData/diagnostics/tests/multimodule/internal.kt index ef3feb5c04d..fa43b40637f 100644 --- a/compiler/testData/diagnostics/tests/multimodule/internal.kt +++ b/compiler/testData/diagnostics/tests/multimodule/internal.kt @@ -5,16 +5,16 @@ package p public class A { - val a = A() - var v = A() - fun a() = A() - inner class B + internal val a = A() + internal var v = A() + internal fun a() = A() + internal inner class B } -val a = A() -var v = A() -fun a() = A() -class B +internal val a = A() +internal var v = A() +internal fun a() = A() +internal class B // MODULE: m2(m1) // FILE: b.kt @@ -22,14 +22,14 @@ class B import p.* fun test() { - val _a = a - val _v = v - a() - B() + val _a = a + val _v = v + a() + B() val inst = A() - val ia = inst.a - val iv = inst.v - inst.a() - inst.B() + val ia = inst.a + val iv = inst.v + inst.a() + inst.B() } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/multimodule/internal.txt b/compiler/testData/diagnostics/tests/multimodule/internal.txt index 942bb39a82d..c2a33abbf99 100644 --- a/compiler/testData/diagnostics/tests/multimodule/internal.txt +++ b/compiler/testData/diagnostics/tests/multimodule/internal.txt @@ -2,20 +2,20 @@ package package p { - public val a: p.A - public var v: p.A - public fun a(): p.A + internal val a: p.A + internal var v: p.A + internal fun a(): p.A public final class A { public constructor A() - public final val a: p.A - public final var v: p.A - public final fun a(): p.A + internal final val a: p.A + internal final var v: p.A + internal final fun a(): p.A 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 - public final inner class B { + internal final inner class B { public constructor B() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -23,7 +23,7 @@ package p { } } - public final class B { + internal final class B { public constructor B() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -38,15 +38,17 @@ package public fun test(): kotlin.Unit package p { - public val a: p.A - public var v: p.A - public fun a(): p.A + internal val a: p.A + internal var v: p.A + internal fun a(): p.A public final class A { // -- Module: -- } - public final class B { + internal final class B { // -- Module: -- } } + + diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java index 3d27e58b8a4..073b7cb7962 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java @@ -120,8 +120,8 @@ public class Visibilities { @Override public boolean isVisible(@NotNull ReceiverValue receiver, @NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) { - //NOTE: supposedly temporarily - return PUBLIC.isVisible(receiver, what, from); + DeclarationDescriptor fromOrModule = from instanceof PackageViewDescriptor ? ((PackageViewDescriptor) from).getModule() : from; + return isInFriendModule(what, fromOrModule); } }; diff --git a/idea/testData/multiModuleHighlighting/testRoot/m1/m1.kt b/idea/testData/multiModuleHighlighting/testRoot/m1/m1.kt index fc84bb123c8..03a95930ea7 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m1/m1.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m1/m1.kt @@ -4,7 +4,7 @@ import shared.t private fun privateInM1() { } -fun internalInM1() { +internal fun internalInM1() { } public fun publicInM1() { } diff --git a/idea/testData/multiModuleHighlighting/testRoot/m1Test/m1Test.kt b/idea/testData/multiModuleHighlighting/testRoot/m1Test/m1Test.kt index a66b3f63bc3..dfde47dd0fe 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m1Test/m1Test.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m1Test/m1Test.kt @@ -4,7 +4,7 @@ import shared.* private fun privateInM1Test() { } -fun internalInM1Test() { +internal fun internalInM1Test() { } public fun publicInM1Test() { } diff --git a/idea/testData/multiModuleHighlighting/testRoot/m2/m2.kt b/idea/testData/multiModuleHighlighting/testRoot/m2/m2.kt index 0cedfaffa26..05230b3aa27 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m2/m2.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m2/m2.kt @@ -4,14 +4,14 @@ import shared.t private fun privateInM2() { } -fun internalInM2() { +internal fun internalInM2() { } public fun publicInM2() { } fun access() { privateInM1() - internalInM1() + internalInM1() publicInM1() privateInM1Test() diff --git a/idea/testData/multiModuleHighlighting/testRoot/m2Test/m2Test.kt b/idea/testData/multiModuleHighlighting/testRoot/m2Test/m2Test.kt index dac00159f24..dc5df00b45a 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m2Test/m2Test.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m2Test/m2Test.kt @@ -4,18 +4,18 @@ import shared.* private fun privateInM2Test() { } -fun internalInM2Test() { +internal fun internalInM2Test() { } public fun publicInM2Test() { } fun access() { privateInM1() - internalInM1() + internalInM1() publicInM1() privateInM1Test() - internalInM1Test() + internalInM1Test() publicInM1Test() privateInM2() diff --git a/idea/testData/multiModuleHighlighting/testRoot/m3/m3.kt b/idea/testData/multiModuleHighlighting/testRoot/m3/m3.kt index 02ca0c0f838..ee5323f712f 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m3/m3.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m3/m3.kt @@ -4,7 +4,7 @@ import shared.t private fun privateInM3() { } -fun internalInM3() { +internal fun internalInM3() { } public fun publicInM3() { } diff --git a/idea/testData/multiModuleHighlighting/testRoot/m3Test/m3Test.kt b/idea/testData/multiModuleHighlighting/testRoot/m3Test/m3Test.kt index 1ba13ed6322..280fdaf6535 100644 --- a/idea/testData/multiModuleHighlighting/testRoot/m3Test/m3Test.kt +++ b/idea/testData/multiModuleHighlighting/testRoot/m3Test/m3Test.kt @@ -4,26 +4,26 @@ import shared.* private fun privateInM3Test() { } -fun internalInM3Test() { +internal fun internalInM3Test() { } public fun publicInM3Test() { } fun access() { privateInM1() - internalInM1() + internalInM1() publicInM1() privateInM1Test() - internalInM1Test() + internalInM1Test() publicInM1Test() privateInM2() - internalInM2() + internalInM2() publicInM2() privateInM2Test() - internalInM2Test() + internalInM2Test() publicInM2Test() privateInM3() diff --git a/idea/testData/multiModuleHighlighting/visibility/m1/m1.kt b/idea/testData/multiModuleHighlighting/visibility/m1/m1.kt index 682f78683e3..4da61b7ab50 100644 --- a/idea/testData/multiModuleHighlighting/visibility/m1/m1.kt +++ b/idea/testData/multiModuleHighlighting/visibility/m1/m1.kt @@ -1,12 +1,12 @@ package m1 public class PublicClassInM1 -class InternalClassInM1 +internal class InternalClassInM1 private class PrivateClassInM1 public fun publicFunInM1() { } -fun internalFunInM1() { +internal fun internalFunInM1() { } private fun privateFunInM1() { } @@ -18,7 +18,7 @@ fun testVisibility() { public open class A internal constructor() { private fun pri() { } - fun int() { + internal fun int() { } protected fun pro() { } diff --git a/idea/testData/multiModuleHighlighting/visibility/m2/m2.kt b/idea/testData/multiModuleHighlighting/visibility/m2/m2.kt index be295e86d80..f1ffa7a3666 100644 --- a/idea/testData/multiModuleHighlighting/visibility/m2/m2.kt +++ b/idea/testData/multiModuleHighlighting/visibility/m2/m2.kt @@ -5,22 +5,22 @@ import m1.* fun testVisibility() { PublicClassInM1() - InternalClassInM1() + InternalClassInM1() PrivateClassInM1() publicFunInM1() - internalFunInM1() + internalFunInM1() privateFunInM1() } public class ClassInM2 -public class B: A() { +public class B: A() { - fun accessA(a: A) {} + fun accessA(a: A) {} fun f() { pri() @@ -29,6 +29,6 @@ public class B: A() { pub() - int() + int() } } \ No newline at end of file