Support visibility for protected static members
#KT-2999 Fixed
This commit is contained in:
+14
-5
@@ -84,11 +84,20 @@ public final class DescriptorResolverUtils {
|
||||
return Visibilities.INTERNAL;
|
||||
}
|
||||
}
|
||||
return modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC) ? Visibilities.PUBLIC :
|
||||
(modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE) ? Visibilities.PRIVATE :
|
||||
(modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED) ? Visibilities.PROTECTED :
|
||||
//Visibilities.PUBLIC));
|
||||
JavaDescriptorResolver.PACKAGE_VISIBILITY));
|
||||
|
||||
if (modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
return Visibilities.PUBLIC;
|
||||
}
|
||||
if (modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
return Visibilities.PRIVATE;
|
||||
}
|
||||
if (modifierListOwner.hasModifierProperty(PsiModifier.PROTECTED)) {
|
||||
if (modifierListOwner.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return JavaDescriptorResolver.PROTECTED_STATIC_VISIBILITY;
|
||||
}
|
||||
return Visibilities.PROTECTED;
|
||||
}
|
||||
return JavaDescriptorResolver.PACKAGE_VISIBILITY;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+29
@@ -55,6 +55,35 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
}
|
||||
};
|
||||
|
||||
public static final Visibility PROTECTED_STATIC_VISIBILITY = new Visibility("protected_static", false) {
|
||||
@Override
|
||||
protected boolean isVisible(@NotNull DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) {
|
||||
ClassDescriptor fromClass = DescriptorUtils.getParentOfType(from, ClassDescriptor.class, false);
|
||||
if (fromClass == null) return false;
|
||||
|
||||
ClassDescriptor whatClass;
|
||||
// protected static class
|
||||
if (what instanceof ClassDescriptor) {
|
||||
DeclarationDescriptor containingDeclaration = what.getContainingDeclaration();
|
||||
assert containingDeclaration instanceof ClassDescriptor : "Only static nested classes can have protected_static visibility";
|
||||
whatClass = (ClassDescriptor) containingDeclaration;
|
||||
}
|
||||
// protected static function or property
|
||||
else {
|
||||
DeclarationDescriptor whatDeclarationDescriptor = what.getContainingDeclaration();
|
||||
assert whatDeclarationDescriptor instanceof NamespaceDescriptor : "Only static declarations can have protected_static visibility";
|
||||
whatClass = DescriptorUtils.getClassForCorrespondingJavaNamespace((NamespaceDescriptor) whatDeclarationDescriptor);
|
||||
}
|
||||
|
||||
assert whatClass != null : "Couldn't find ClassDescriptor for protected static member " + what;
|
||||
|
||||
if (DescriptorUtils.isSubclass(fromClass, whatClass)) {
|
||||
return true;
|
||||
}
|
||||
return isVisible(what, fromClass.getContainingDeclaration());
|
||||
}
|
||||
};
|
||||
|
||||
private JavaPropertyResolver propertiesResolver;
|
||||
private JavaClassResolver classResolver;
|
||||
private JavaConstructorResolver constructorResolver;
|
||||
|
||||
Reference in New Issue
Block a user