Correctly checking visibility from package view.

This commit is contained in:
Evgeny Gerashchenko
2013-12-03 19:52:51 +04:00
parent 5c22787c15
commit ecd5dc60ad
3 changed files with 6 additions and 8 deletions
@@ -189,7 +189,7 @@ public class CodegenUtil {
return true;
}
DeclarationDescriptor contextDescriptor = context.getContextDescriptor();
return DescriptorUtils.isInSameModule(declarationDescriptor, contextDescriptor);
return DescriptorUtils.areInSameModule(declarationDescriptor, contextDescriptor);
}
public static boolean hasAbstractMembers(@NotNull ClassDescriptor classDescriptor) {
@@ -73,7 +73,8 @@ public class Visibilities {
public static final Visibility INTERNAL = new Visibility("internal", false) {
@Override
protected boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) {
return DescriptorUtils.isInSameModule(what, from);
DeclarationDescriptor fromOrModule = from instanceof PackageViewDescriptor ? ((PackageViewDescriptor) from).getModule() : from;
return DescriptorUtils.areInSameModule(what, fromOrModule);
}
};
@@ -120,9 +121,6 @@ public class Visibilities {
@NotNull DeclarationDescriptorWithVisibility what,
@NotNull DeclarationDescriptor from
) {
if (from instanceof PackageViewDescriptor) {
return null; // TODO 1 review: everything is visible from package view
}
DeclarationDescriptorWithVisibility parent = what;
while (parent != null && parent.getVisibility() != LOCAL) {
if (!parent.getVisibility().isVisible(parent, from)) {
@@ -136,9 +136,9 @@ public class DescriptorUtils {
return descriptor.getContainingDeclaration() instanceof PackageFragmentDescriptor;
}
public static boolean isInSameModule(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) {
ModuleDescriptor parentModule = getParentOfType(first, ModuleDescriptorImpl.class, false);
ModuleDescriptor fromModule = getParentOfType(second, ModuleDescriptorImpl.class, false);
public static boolean areInSameModule(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) {
ModuleDescriptor parentModule = getParentOfType(first, ModuleDescriptor.class, false);
ModuleDescriptor fromModule = getParentOfType(second, ModuleDescriptor.class, false);
assert parentModule != null && fromModule != null;
return parentModule.equals(fromModule);
}