mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[java-refactorings] Move Static Members produces red code when static import is present bug fix
IDEA-321620 GitOrigin-RevId: 78687728404da5953fd09c99066b8262583b8746
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f6f43aed3e
commit
8e3d29b3f9
@@ -298,7 +298,7 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
UsageInfo[] infos = filtered.toArray(UsageInfo.EMPTY_ARRAY);
|
||||
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(infos), newMember, myNewVisibility);
|
||||
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(infos), newMember, newMember.getContainingFile(), myNewVisibility);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,9 +11,10 @@ import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
||||
public final class VisibilityUtil {
|
||||
public final class VisibilityUtil {
|
||||
@NonNls public static final String ESCALATE_VISIBILITY = "EscalateVisible";
|
||||
private static final String[] visibilityModifiers = {
|
||||
PsiModifier.PRIVATE,
|
||||
@@ -44,13 +45,22 @@ public final class VisibilityUtil {
|
||||
}
|
||||
|
||||
public static void escalateVisibility(PsiMember modifierListOwner, PsiElement place) throws IncorrectOperationException {
|
||||
escalateVisibility(modifierListOwner, place, null);
|
||||
}
|
||||
|
||||
public static void escalateVisibility(PsiMember modifierListOwner, PsiElement place, @Nullable PsiFile fileResolveScope)
|
||||
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;
|
||||
if (modifier.equals(visibilityModifier)) break;
|
||||
}
|
||||
for(;index < visibilityModifiers.length && !PsiUtil.isAccessible(modifierListOwner, place, null); index++) {
|
||||
PsiResolveHelper psiResolveHelper = PsiResolveHelper.getInstance(place.getProject());
|
||||
for (;
|
||||
index < visibilityModifiers.length &&
|
||||
!psiResolveHelper.isAccessible(modifierListOwner, modifierListOwner.getModifierList(), place, null, fileResolveScope);
|
||||
index++) {
|
||||
@PsiModifier.ModifierConstant String modifier = visibilityModifiers[index];
|
||||
PsiUtil.setModifierProperty(modifierListOwner, modifier, true);
|
||||
}
|
||||
@@ -119,19 +129,28 @@ public final class VisibilityUtil {
|
||||
}
|
||||
|
||||
public static void fixVisibility(PsiElement[] elements, PsiMember member, @PsiModifier.ModifierConstant String newVisibility) {
|
||||
fixVisibility(elements, member, null, newVisibility);
|
||||
}
|
||||
|
||||
public static void fixVisibility(PsiElement[] elements,
|
||||
PsiMember member,
|
||||
@Nullable PsiFile fileResolveScope,
|
||||
@PsiModifier.ModifierConstant String newVisibility) {
|
||||
if (newVisibility == null) return;
|
||||
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
|
||||
for (PsiElement element : elements) {
|
||||
if (element != null) {
|
||||
escalateVisibility(member, element);
|
||||
escalateVisibility(member, element, fileResolveScope);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
setVisibility(member.getModifierList(), newVisibility);
|
||||
}
|
||||
else {
|
||||
setVisibility(member.getModifierList(), newVisibility);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setVisibility(@NotNull PsiModifierList modifierList, @PsiModifier.ModifierConstant @NotNull String newVisibility) throws IncorrectOperationException {
|
||||
public static void setVisibility(@NotNull PsiModifierList modifierList, @PsiModifier.ModifierConstant @NotNull String newVisibility)
|
||||
throws IncorrectOperationException {
|
||||
modifierList.setModifierProperty(newVisibility, true);
|
||||
if (newVisibility.equals(PsiModifier.PRIVATE)) {
|
||||
modifierList.setModifierProperty(PsiModifier.DEFAULT, false);
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package pack;
|
||||
|
||||
import static pack.A.B.*;
|
||||
|
||||
public class A {
|
||||
void run() {
|
||||
z++;
|
||||
foo();
|
||||
}
|
||||
|
||||
static class B {
|
||||
static int z = 10;
|
||||
|
||||
static void foo() {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package pack;
|
||||
|
||||
import static pack.A.B.*;
|
||||
|
||||
public class A {
|
||||
void run() {
|
||||
z++;
|
||||
foo();
|
||||
}
|
||||
|
||||
private static int z = 10;
|
||||
|
||||
private static void foo() {}
|
||||
static class B {
|
||||
}
|
||||
}
|
||||
@@ -213,6 +213,10 @@ public class MoveMembersTest extends LightMultiFileTestCase {
|
||||
doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0);
|
||||
}
|
||||
|
||||
public void testEscalateVisibilityWhenMoveStaticMemberToStaticClass() {
|
||||
doTest("pack.A", "pack.A.B", true, VisibilityUtil.ESCALATE_VISIBILITY, 1, 2);
|
||||
}
|
||||
|
||||
public void testStringConstantInSwitchLabelExpression() {
|
||||
doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user