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; return true;
} }
DeclarationDescriptor contextDescriptor = context.getContextDescriptor(); DeclarationDescriptor contextDescriptor = context.getContextDescriptor();
return DescriptorUtils.isInSameModule(declarationDescriptor, contextDescriptor); return DescriptorUtils.areInSameModule(declarationDescriptor, contextDescriptor);
} }
public static boolean hasAbstractMembers(@NotNull ClassDescriptor classDescriptor) { public static boolean hasAbstractMembers(@NotNull ClassDescriptor classDescriptor) {
@@ -73,7 +73,8 @@ public class Visibilities {
public static final Visibility INTERNAL = new Visibility("internal", false) { public static final Visibility INTERNAL = new Visibility("internal", false) {
@Override @Override
protected boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) { 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 DeclarationDescriptorWithVisibility what,
@NotNull DeclarationDescriptor from @NotNull DeclarationDescriptor from
) { ) {
if (from instanceof PackageViewDescriptor) {
return null; // TODO 1 review: everything is visible from package view
}
DeclarationDescriptorWithVisibility parent = what; DeclarationDescriptorWithVisibility parent = what;
while (parent != null && parent.getVisibility() != LOCAL) { while (parent != null && parent.getVisibility() != LOCAL) {
if (!parent.getVisibility().isVisible(parent, from)) { if (!parent.getVisibility().isVisible(parent, from)) {
@@ -136,9 +136,9 @@ public class DescriptorUtils {
return descriptor.getContainingDeclaration() instanceof PackageFragmentDescriptor; return descriptor.getContainingDeclaration() instanceof PackageFragmentDescriptor;
} }
public static boolean isInSameModule(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) { public static boolean areInSameModule(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) {
ModuleDescriptor parentModule = getParentOfType(first, ModuleDescriptorImpl.class, false); ModuleDescriptor parentModule = getParentOfType(first, ModuleDescriptor.class, false);
ModuleDescriptor fromModule = getParentOfType(second, ModuleDescriptorImpl.class, false); ModuleDescriptor fromModule = getParentOfType(second, ModuleDescriptor.class, false);
assert parentModule != null && fromModule != null; assert parentModule != null && fromModule != null;
return parentModule.equals(fromModule); return parentModule.equals(fromModule);
} }