diff --git a/compiler/testData/diagnostics/tests/j+k/packageVisibility.kt b/compiler/testData/diagnostics/tests/j+k/packageVisibility.kt index 83403155225..6fe2702aa13 100644 --- a/compiler/testData/diagnostics/tests/j+k/packageVisibility.kt +++ b/compiler/testData/diagnostics/tests/j+k/packageVisibility.kt @@ -2,12 +2,24 @@ package a; class MyJavaClass { + static int staticMethod() { + return 1; + } + + static class NestedClass { + static int staticMethodOfNested() { + return 1; + } + } } //FILE:a.kt package a val mc = MyJavaClass() +val x = MyJavaClass.staticMethod() +val y = MyJavaClass.NestedClass.staticMethodOfNested() +val z = MyJavaClass.NestedClass() //FILE: b.kt package b @@ -16,9 +28,17 @@ import a.MyJavaClass val mc1 = MyJavaClass() +val x = MyJavaClass.staticMethod() +val y = MyJavaClass.NestedClass.staticMethodOfNested() +val z = MyJavaClass.NestedClass() + //FILE: c.kt package a.c import a.MyJavaClass -val mc1 = MyJavaClass() \ No newline at end of file +val mc1 = MyJavaClass() + +val x = MyJavaClass.staticMethod() +val y = MyJavaClass.NestedClass.staticMethodOfNested() +val z = MyJavaClass.NestedClass() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java index 8c0e6af6460..235bbe47c47 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.java; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; @@ -134,8 +135,20 @@ public class JavaVisibilities { }; private static boolean areInSamePackage(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) { - PackageFragmentDescriptor whatPackage = DescriptorUtils.getParentOfType(first, PackageFragmentDescriptor.class, false); - PackageFragmentDescriptor fromPackage = DescriptorUtils.getParentOfType(second, PackageFragmentDescriptor.class, false); + PackageFragmentDescriptor whatPackage = getPackageStaticsAware(first); + PackageFragmentDescriptor fromPackage = getPackageStaticsAware(second); return fromPackage != null && whatPackage != null && whatPackage.getFqName().equals(fromPackage.getFqName()); } + + @Nullable + private static PackageFragmentDescriptor getPackageStaticsAware(@NotNull DeclarationDescriptor member) { + PackageFragmentDescriptor packageFragment = DescriptorUtils.getParentOfType(member, PackageFragmentDescriptor.class, false); + if (packageFragment instanceof JavaPackageFragmentDescriptor + && ((JavaPackageFragmentDescriptor) packageFragment).getKind() == JavaPackageFragmentDescriptor.Kind.CLASS_STATICS) { + ClassDescriptor classForPackage = + ((JavaPackageFragmentDescriptor) packageFragment).getJavaDescriptorResolver().resolveClass(packageFragment.getFqName()); + return DescriptorUtils.getParentOfType(classForPackage, PackageFragmentDescriptor.class, false); + } + return packageFragment; + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java index 37d38674048..87063d0824d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java @@ -20,6 +20,7 @@ import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; +import org.jetbrains.jet.lang.descriptors.Visibility; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;