From 0ddfedba498d073ed55db4dfe31354fdac27231e Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 11 Jun 2015 18:58:32 +0300 Subject: [PATCH] Allowed accessing private members from same package, but different package fragment instance. --- .../org/jetbrains/kotlin/descriptors/Visibilities.java | 5 +++++ .../kotlin/jps/build/IncrementalJpsTestGenerated.java | 6 ++++++ .../incremental/pureKotlin/accessPrivateMembers/bar.kt | 7 +++++++ .../pureKotlin/accessPrivateMembers/bar.kt.new | 7 +++++++ .../pureKotlin/accessPrivateMembers/build.log | 7 +++++++ .../incremental/pureKotlin/accessPrivateMembers/foo.kt | 9 +++++++++ 6 files changed, 41 insertions(+) create mode 100644 jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt create mode 100644 jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt.new create mode 100644 jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/build.log create mode 100644 jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/foo.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java index 1c05073c105..6a7c8c9c183 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/Visibilities.java @@ -53,6 +53,11 @@ public class Visibilities { if (parent == fromParent) { return true; } + if (fromParent instanceof PackageFragmentDescriptor) { + return parent instanceof PackageFragmentDescriptor + && ((PackageFragmentDescriptor) parent).getFqName().equals(((PackageFragmentDescriptor) fromParent).getFqName()) + && DescriptorUtils.areInSameModule(fromParent, parent); + } fromParent = fromParent.getContainingDeclaration(); } return false; diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index da0f6d5dd2c..27102441062 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -109,6 +109,12 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class PureKotlin extends AbstractIncrementalJpsTest { + @TestMetadata("accessPrivateMembers") + public void testAccessPrivateMembers() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/"); + doTest(fileName); + } + @TestMetadata("accessingFunctionsViaPackagePart") public void testAccessingFunctionsViaPackagePart() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/accessingFunctionsViaPackagePart/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt new file mode 100644 index 00000000000..8c016666552 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt @@ -0,0 +1,7 @@ +package test + +fun main(args: Array) { + val x: Foo = Foo() + foo() + c +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt.new b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt.new new file mode 100644 index 00000000000..8c016666552 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/bar.kt.new @@ -0,0 +1,7 @@ +package test + +fun main(args: Array) { + val x: Foo = Foo() + foo() + c +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/build.log b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/build.log new file mode 100644 index 00000000000..6fabb2be215 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/build.log @@ -0,0 +1,7 @@ +Cleaning output files: +out/production/module/test/TestPackage$bar$*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/bar.kt +End of files diff --git a/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/foo.kt b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/foo.kt new file mode 100644 index 00000000000..5f83a146f9d --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/accessPrivateMembers/foo.kt @@ -0,0 +1,9 @@ +package test + +private class Foo + +private fun foo() { + +} + +private val c = 1 \ No newline at end of file