diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 2cc4e9cc3a9..76f3bb4c30b 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -76,7 +76,24 @@ public class JavaDescriptorResolver { return visitor.visitDeclarationDescriptor(this, data); } }; - + + private static Visibility PACKAGE_VISIBILITY = new Visibility("package", false) { + @Override + protected boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) { + NamespaceDescriptor parentPackage = DescriptorUtils.getParentOfType(what, NamespaceDescriptor.class); + NamespaceDescriptor fromPackage = DescriptorUtils.getParentOfType(from, NamespaceDescriptor.class, false); + assert parentPackage != null; + return parentPackage.equals(fromPackage); + } + + @Override + protected Integer compareTo(@NotNull Visibility visibility) { + if (this == visibility) return 0; + if (visibility == Visibilities.PRIVATE) return 1; + return -1; + } + }; + private enum TypeParameterDescriptorOrigin { JAVA, KOTLIN, @@ -1561,7 +1578,7 @@ public class JavaDescriptorResolver { private TypeSubstitutor typeSubstitutorForGenericSupertypes(ResolverScopeData scopeData) { if (scopeData instanceof ResolverClassData) { - return createSubstitutorForGenericSupertypes(((ResolverClassData) scopeData).getClassDescriptor()); + return createSubstitutorForGenericSupertypes(((ResolverClassData)scopeData).getClassDescriptor()); } else { return TypeSubstitutor.EMPTY; } @@ -1625,10 +1642,11 @@ public class JavaDescriptorResolver { } private static Visibility resolveVisibilityFromPsiModifiers(PsiModifierListOwner modifierListOwner) { - //TODO report error return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC : - (modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE : - (modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED : Visibilities.PUBLIC));//todo + (modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE : + (modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED : + //Visibilities.PUBLIC)); + PACKAGE_VISIBILITY)); } public List resolveInnerClasses(DeclarationDescriptor owner, PsiClass psiClass, boolean staticMembers) { diff --git a/compiler/testData/diagnostics/tests/j+k/packageVisibility.jet b/compiler/testData/diagnostics/tests/j+k/packageVisibility.jet new file mode 100644 index 00000000000..7dc1e6b10e0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/packageVisibility.jet @@ -0,0 +1,24 @@ +//FILE: a/MyJavaClass.java +package a; + +class MyJavaClass { +} + +//FILE:a.kt +package a + +val mc = MyJavaClass() + +//FILE: b.kt +package b + +import a.MyJavaClass + +val mc1 = MyJavaClass() + +//FILE: c.kt +package a.c + +import a.MyJavaClass + +val mc1 = MyJavaClass() \ No newline at end of file