mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
move static members with static non-demand imports to preseve non-demand (IDEADEV-40862)
This commit is contained in:
@@ -71,7 +71,7 @@ public class MoveJavaMemberHandler implements MoveMemberHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isInMovedElement(PsiElement element, Set<PsiMember> membersToMove) {
|
||||
private static boolean isInMovedElement(PsiElement element, Set<PsiMember> membersToMove) {
|
||||
for (PsiMember member : membersToMove) {
|
||||
if (PsiTreeUtil.isAncestor(member, element, false)) return true;
|
||||
}
|
||||
@@ -86,7 +86,7 @@ public class MoveJavaMemberHandler implements MoveMemberHandler {
|
||||
PsiExpression qualifier = refExpr.getQualifierExpression();
|
||||
if (qualifier != null) {
|
||||
if (usage.qualifierClass != null) {
|
||||
changeQualifier(refExpr, usage.qualifierClass);
|
||||
changeQualifier(refExpr, usage.qualifierClass, usage.member);
|
||||
}
|
||||
else {
|
||||
refExpr.setQualifierExpression(null);
|
||||
@@ -94,7 +94,7 @@ public class MoveJavaMemberHandler implements MoveMemberHandler {
|
||||
}
|
||||
else { // no qualifier
|
||||
if (usage.qualifierClass != null) {
|
||||
changeQualifier(refExpr, usage.qualifierClass);
|
||||
changeQualifier(refExpr, usage.qualifierClass, usage.member);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -136,11 +136,11 @@ public class MoveJavaMemberHandler implements MoveMemberHandler {
|
||||
ChangeContextUtil.decodeContextInfo(scope, null, null);
|
||||
}
|
||||
|
||||
private void changeQualifier(PsiReferenceExpression refExpr, PsiClass aClass) throws IncorrectOperationException {
|
||||
private static void changeQualifier(PsiReferenceExpression refExpr, PsiClass aClass, PsiMember member) throws IncorrectOperationException {
|
||||
if (RefactoringUtil.hasOnDemandStaticImport(refExpr, aClass)) {
|
||||
refExpr.setQualifierExpression(null);
|
||||
}
|
||||
else {
|
||||
else if (!RefactoringUtil.hasStaticImportOn(refExpr, member.getContainingClass(), member)){
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(refExpr.getProject()).getElementFactory();
|
||||
refExpr.setQualifierExpression(factory.createReferenceExpression(aClass));
|
||||
}
|
||||
|
||||
@@ -224,6 +224,21 @@ public class RefactoringUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean hasStaticImportOn(final PsiReferenceExpression expr, final PsiClass aClass, final PsiMember member) {
|
||||
if (expr.getContainingFile() instanceof PsiJavaFile) {
|
||||
final PsiImportList importList = ((PsiJavaFile)expr.getContainingFile()).getImportList();
|
||||
if (importList != null) {
|
||||
final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements();
|
||||
for(PsiImportStaticStatement stmt: importStaticStatements) {
|
||||
if (!stmt.isOnDemand() && stmt.resolveTargetClass() == aClass && Comparing.strEqual(stmt.getReferenceName(), member.getName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static PsiElement replaceElementsWithMap(PsiElement replaceIn, final Map<PsiElement, PsiElement> elementsToReplace) throws IncorrectOperationException {
|
||||
for(Map.Entry<PsiElement, PsiElement> e: elementsToReplace.entrySet()) {
|
||||
if (e.getKey() == replaceIn) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import static B.Z;
|
||||
|
||||
public class A {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Z = " + Z);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
public class B {
|
||||
public static final String Z = "z";
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
public class C {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import static C.Z;
|
||||
|
||||
public class A {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Z = " + Z);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
public class B {
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
public class C {
|
||||
public static final String Z = "z";
|
||||
}
|
||||
@@ -69,6 +69,10 @@ public class MoveMembersTest extends MultiFileTestCase {
|
||||
doTest("C", "B", 0);
|
||||
}
|
||||
|
||||
public void testExplicitStaticImport() throws Exception {
|
||||
doTest("C", "B", 0);
|
||||
}
|
||||
|
||||
public void testProtectedConstructor() throws Exception {
|
||||
doTest("pack1.A", "pack1.C", 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user