Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,137 +38,141 @@

import jakarta.annotation.Nonnull;


public class VisibilityUtil {
@NonNls
public static final String ESCALATE_VISIBILITY = "EscalateVisible";
private static final String[] visibilityModifiers = {
PsiModifier.PRIVATE,
PsiModifier.PACKAGE_LOCAL,
PsiModifier.PROTECTED,
PsiModifier.PUBLIC
};

private VisibilityUtil() {
}

public static int compare(@PsiModifier.ModifierConstant String v1, @PsiModifier.ModifierConstant String v2) {
return ArrayUtil.find(visibilityModifiers, v2) - ArrayUtil.find(visibilityModifiers, v1);
}

@PsiModifier.ModifierConstant
public static String getHighestVisibility(@PsiModifier.ModifierConstant String v1, @PsiModifier.ModifierConstant String v2) {
return compare(v1, v2) < 0 ? v1 : v2;
}

public static void escalateVisibility(PsiMember modifierListOwner, PsiElement place) throws IncorrectOperationException {
final String visibilityModifier = getVisibilityModifier(modifierListOwner.getModifierList());
int index;
for (index = 0; index < visibilityModifiers.length; index++) {
String modifier = visibilityModifiers[index];
if (modifier.equals(visibilityModifier)) {
break;
}
}
for (; index < visibilityModifiers.length && !PsiUtil.isAccessible(modifierListOwner, place, null); index++) {
@PsiModifier.ModifierConstant String modifier = visibilityModifiers[index];
PsiUtil.setModifierProperty(modifierListOwner, modifier, true);
}
}
@NonNls
public static final String ESCALATE_VISIBILITY = "EscalateVisible";
private static final String[] visibilityModifiers = {
PsiModifier.PRIVATE,
PsiModifier.PACKAGE_LOCAL,
PsiModifier.PROTECTED,
PsiModifier.PUBLIC
};

public static void escalateVisibility(PsiModifierList modifierList, PsiElement place) throws IncorrectOperationException {
final PsiElement parent = modifierList.getParent();
if (parent instanceof PsiMember) {
escalateVisibility((PsiMember) parent, place);
private VisibilityUtil() {
}
}

@PsiModifier.ModifierConstant
public static String getPossibleVisibility(final PsiMember psiMethod, final PsiElement place) {
Project project = psiMethod.getProject();
if (PsiUtil.isAccessible(project, psiMethod, place, null)) {
return getVisibilityModifier(psiMethod.getModifierList());
}
if (JavaPsiFacade.getInstance(project).arePackagesTheSame(psiMethod, place)) {
return PsiModifier.PACKAGE_LOCAL;
public static int compare(@PsiModifier.ModifierConstant String v1, @PsiModifier.ModifierConstant String v2) {
return ArrayUtil.find(visibilityModifiers, v2) - ArrayUtil.find(visibilityModifiers, v1);
}
if (InheritanceUtil.isInheritorOrSelf(PsiTreeUtil.getParentOfType(place, PsiClass.class), psiMethod.getContainingClass(), true)) {
return PsiModifier.PROTECTED;
}
return PsiModifier.PUBLIC;
}

@PsiModifier.ModifierConstant
public static String getVisibilityModifier(PsiModifierList list) {
if (list == null) {
return PsiModifier.PACKAGE_LOCAL;
}
for (@PsiModifier.ModifierConstant String modifier : visibilityModifiers) {
if (list.hasModifierProperty(modifier)) {
return modifier;
}
@PsiModifier.ModifierConstant
public static String getHighestVisibility(@PsiModifier.ModifierConstant String v1, @PsiModifier.ModifierConstant String v2) {
return compare(v1, v2) < 0 ? v1 : v2;
}
return PsiModifier.PACKAGE_LOCAL;
}

@Nonnull
@NonNls
public static String getVisibilityString(@PsiModifier.ModifierConstant String visibilityModifier) {
if (PsiModifier.PACKAGE_LOCAL.equals(visibilityModifier)) {
return "";

public static void escalateVisibility(PsiMember modifierListOwner, PsiElement place) throws IncorrectOperationException {
final String visibilityModifier = getVisibilityModifier(modifierListOwner.getModifierList());
int index;
for (index = 0; index < visibilityModifiers.length; index++) {
String modifier = visibilityModifiers[index];
if (modifier.equals(visibilityModifier)) {
break;
}
}
for (; index < visibilityModifiers.length && !PsiUtil.isAccessible(modifierListOwner, place, null); index++) {
@PsiModifier.ModifierConstant String modifier = visibilityModifiers[index];
PsiUtil.setModifierProperty(modifierListOwner, modifier, true);
}
}
return visibilityModifier;
}

@Nls
@Nonnull
public static String getVisibilityStringToDisplay(@Nonnull PsiMember member) {
if (member.hasModifierProperty(PsiModifier.PUBLIC)) {
return toPresentableText(PsiModifier.PUBLIC);

public static void escalateVisibility(PsiModifierList modifierList, PsiElement place) throws IncorrectOperationException {
final PsiElement parent = modifierList.getParent();
if (parent instanceof PsiMember) {
escalateVisibility((PsiMember)parent, place);
}
}
if (member.hasModifierProperty(PsiModifier.PROTECTED)) {
return toPresentableText(PsiModifier.PROTECTED);

@PsiModifier.ModifierConstant
public static String getPossibleVisibility(final PsiMember psiMethod, final PsiElement place) {
Project project = psiMethod.getProject();
if (PsiUtil.isAccessible(project, psiMethod, place, null)) {
return getVisibilityModifier(psiMethod.getModifierList());
}
if (JavaPsiFacade.getInstance(project).arePackagesTheSame(psiMethod, place)) {
return PsiModifier.PACKAGE_LOCAL;
}
if (InheritanceUtil.isInheritorOrSelf(PsiTreeUtil.getParentOfType(place, PsiClass.class), psiMethod.getContainingClass(), true)) {
return PsiModifier.PROTECTED;
}
return PsiModifier.PUBLIC;
}
if (member.hasModifierProperty(PsiModifier.PRIVATE)) {
return toPresentableText(PsiModifier.PRIVATE);

@PsiModifier.ModifierConstant
public static String getVisibilityModifier(PsiModifierList list) {
if (list == null) {
return PsiModifier.PACKAGE_LOCAL;
}
for (@PsiModifier.ModifierConstant String modifier : visibilityModifiers) {
if (list.hasModifierProperty(modifier)) {
return modifier;
}
}
return PsiModifier.PACKAGE_LOCAL;
}
return toPresentableText(PsiModifier.PACKAGE_LOCAL);
}

@Nonnull
public static String toPresentableText(@PsiModifier.ModifierConstant @Nonnull String modifier) {
return PsiBundle.visibilityPresentation(modifier);
}
@Nonnull
@NonNls
public static String getVisibilityString(@PsiModifier.ModifierConstant String visibilityModifier) {
if (PsiModifier.PACKAGE_LOCAL.equals(visibilityModifier)) {
return "";
}
return visibilityModifier;
}

public static void fixVisibility(PsiElement[] elements, PsiMember member, @PsiModifier.ModifierConstant String newVisibility) {
if (newVisibility == null) {
return;
@Nls
@Nonnull
public static String getVisibilityStringToDisplay(@Nonnull PsiMember member) {
if (member.hasModifierProperty(PsiModifier.PUBLIC)) {
return toPresentableText(PsiModifier.PUBLIC);
}
if (member.hasModifierProperty(PsiModifier.PROTECTED)) {
return toPresentableText(PsiModifier.PROTECTED);
}
if (member.hasModifierProperty(PsiModifier.PRIVATE)) {
return toPresentableText(PsiModifier.PRIVATE);
}
return toPresentableText(PsiModifier.PACKAGE_LOCAL);
}
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
for (PsiElement element : elements) {
if (element != null) {
escalateVisibility(member, element);
}
}
} else {
setVisibility(member.getModifierList(), newVisibility);

@Nonnull
public static String toPresentableText(@PsiModifier.ModifierConstant @Nonnull String modifier) {
return PsiBundle.visibilityPresentation(modifier);
}
}

public static void setVisibility(PsiModifierList modifierList, @PsiModifier.ModifierConstant String newVisibility) throws IncorrectOperationException {
modifierList.setModifierProperty(newVisibility, true);
}
public static void fixVisibility(PsiElement[] elements, PsiMember member, @PsiModifier.ModifierConstant String newVisibility) {
if (newVisibility == null) {
return;
}
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
for (PsiElement element : elements) {
if (element != null) {
escalateVisibility(member, element);
}
}
}
else {
setVisibility(member.getModifierList(), newVisibility);
}
}

public static void fixVisibility(PsiExpression[] expressions, PsiMember member, String newVisibility) {
if (newVisibility == null) {
return;
public static void setVisibility(
PsiModifierList modifierList,
@PsiModifier.ModifierConstant String newVisibility
) throws IncorrectOperationException {
modifierList.setModifierProperty(newVisibility, true);
}
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
for (PsiExpression element : expressions) {
escalateVisibility(member, element);
}
} else {
setVisibility(member.getModifierList(), newVisibility);

public static void fixVisibility(PsiExpression[] expressions, PsiMember member, String newVisibility) {
if (newVisibility == null) {
return;
}
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
for (PsiExpression element : expressions) {
escalateVisibility(member, element);
}
}
else {
setVisibility(member.getModifierList(), newVisibility);
}
}
}
}
Loading
Loading