Implement package protected visibility
This commit is contained in:
+2
-2
@@ -95,7 +95,7 @@ public final class DescriptorResolverUtils {
|
||||
if (modifierListOwner.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return JavaDescriptorResolver.PROTECTED_STATIC_VISIBILITY;
|
||||
}
|
||||
return Visibilities.PROTECTED;
|
||||
return JavaDescriptorResolver.PROTECTED_AND_PACKAGE;
|
||||
}
|
||||
return JavaDescriptorResolver.PACKAGE_VISIBILITY;
|
||||
}
|
||||
@@ -121,7 +121,7 @@ public final class DescriptorResolverUtils {
|
||||
public static Visibility getConstructorVisibility(ClassDescriptor classDescriptor) {
|
||||
Visibility containingClassVisibility = classDescriptor.getVisibility();
|
||||
if (containingClassVisibility == JavaDescriptorResolver.PROTECTED_STATIC_VISIBILITY) {
|
||||
return Visibilities.PROTECTED;
|
||||
return JavaDescriptorResolver.PROTECTED_AND_PACKAGE;
|
||||
}
|
||||
return containingClassVisibility;
|
||||
}
|
||||
|
||||
+29
-4
@@ -41,10 +41,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
public 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);
|
||||
return DescriptorUtils.isInSameNamespace(what, from);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,6 +81,34 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
}
|
||||
};
|
||||
|
||||
public static final Visibility PROTECTED_AND_PACKAGE = new Visibility("protected_and_package", false) {
|
||||
@Override
|
||||
protected boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) {
|
||||
if (DescriptorUtils.isInSameNamespace(what, from)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
ClassDescriptor whatClass = DescriptorUtils.getParentOfType(what, ClassDescriptor.class, false);
|
||||
if (whatClass == null) return false;
|
||||
|
||||
ClassDescriptor fromClass = DescriptorUtils.getParentOfType(from, ClassDescriptor.class, false);
|
||||
if (fromClass == null) return false;
|
||||
|
||||
if (DescriptorUtils.isSubclass(fromClass, whatClass)) {
|
||||
return true;
|
||||
}
|
||||
return isVisible(what, fromClass.getContainingDeclaration());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer compareTo(@NotNull Visibility visibility) {
|
||||
if (this == visibility) return 0;
|
||||
if (visibility == Visibilities.INTERNAL) return null;
|
||||
if (visibility == Visibilities.PRIVATE) return 1;
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
|
||||
private JavaPropertyResolver propertiesResolver;
|
||||
private JavaClassResolver classResolver;
|
||||
private JavaConstructorResolver constructorResolver;
|
||||
|
||||
Reference in New Issue
Block a user