mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
Java: basic class initializer support for Pull Members Up refactoring (IDEA-315629)
GitOrigin-RevId: 75dd479b8ff332776bb238fe964cc9cf715b2404
This commit is contained in:
committed by
intellij-monorepo-bot
parent
21584d410d
commit
d86a8f97da
@@ -79,7 +79,7 @@ public class JavaPullUpHandler implements PullUpDialog.Callback, ElementsHandler
|
||||
break;
|
||||
}
|
||||
|
||||
if (element instanceof PsiClass || element instanceof PsiField || element instanceof PsiMethod) {
|
||||
if (element instanceof PsiMember) {
|
||||
elements.add(element);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -76,6 +76,12 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
|
||||
else if (info.getMember() instanceof PsiClass) {
|
||||
doMoveClass(substitutor, info);
|
||||
}
|
||||
else if (info.getMember() instanceof PsiClassInitializer initializer) {
|
||||
PsiClassInitializer copy = (PsiClassInitializer)initializer.copy();
|
||||
final PsiMember movedElement = (PsiMember)myTargetSuperClass.add(copy);
|
||||
myMembersAfterMove.add(movedElement);
|
||||
initializer.delete();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -191,7 +197,7 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
|
||||
field.delete();
|
||||
}
|
||||
|
||||
private void doMoveMethod(PsiSubstitutor substitutor, MemberInfo info) {
|
||||
private void doMoveMethod(PsiSubstitutor substitutor, MemberInfo info) {
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
|
||||
PsiMethod method = (PsiMethod)info.getMember();
|
||||
PsiMethod sibling = method;
|
||||
|
||||
@@ -196,6 +196,9 @@ public class PullUpDialog extends PullUpDialogBase<MemberInfoStorage, MemberInfo
|
||||
|
||||
PsiModifierListOwner element = member.getMember();
|
||||
if (element instanceof PsiClass && ((PsiClass) element).isInterface()) return true;
|
||||
if (element instanceof PsiEnumConstant) {
|
||||
return false;
|
||||
}
|
||||
if (element instanceof PsiField) {
|
||||
return element.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
@@ -211,6 +214,9 @@ public class PullUpDialog extends PullUpDialogBase<MemberInfoStorage, MemberInfo
|
||||
if (superClassMethod != null && !PsiUtil.isLanguageLevel8OrHigher(currentSuperClass)) return false;
|
||||
return !element.hasModifierProperty(PsiModifier.STATIC) || PsiUtil.isLanguageLevel8OrHigher(currentSuperClass);
|
||||
}
|
||||
if (element instanceof PsiClassInitializer) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public class JavaPushDownHandler implements ElementsHandler, ContextAwareActionH
|
||||
break;
|
||||
}
|
||||
|
||||
if (element instanceof PsiClass || element instanceof PsiField || element instanceof PsiMethod) {
|
||||
if (element instanceof PsiMember) {
|
||||
elements.add(element);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
class ClassInitializer extends Super {
|
||||
static<caret> {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
class Super {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
class ClassInitializer extends Super {
|
||||
}
|
||||
class Super {
|
||||
|
||||
static {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ import java.util.stream.Collectors;
|
||||
public class PullUpTest extends LightRefactoringTestCase {
|
||||
private static final String BASE_PATH = "/refactoring/pullUp/";
|
||||
|
||||
private static final String IGNORE_CONFLICTS = "IGNORE";
|
||||
private static final String IGNORE_CONFLICTS = "IGNORE";
|
||||
|
||||
public void testQualifiedThis() {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("Inner", PsiClass.class));
|
||||
@@ -224,6 +224,10 @@ public class PullUpTest extends LightRefactoringTestCase {
|
||||
new RefactoringTestUtil.MemberDescriptor("bar", PsiMethod.class));
|
||||
}
|
||||
|
||||
public void testClassInitializer() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testRenameConflictingTypeParameters() {
|
||||
doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, false));
|
||||
}
|
||||
@@ -281,7 +285,9 @@ public class PullUpTest extends LightRefactoringTestCase {
|
||||
assertTrue(interfaces[0].isWritable());
|
||||
targetClass = interfaces[0];
|
||||
}
|
||||
final MemberInfo[] infos = RefactoringTestUtil.findMembers(sourceClass, membersToFind);
|
||||
final MemberInfo[] infos = membersToFind.length == 0
|
||||
? new MemberInfo[]{new MemberInfo(PsiTreeUtil.getParentOfType(elementAt, PsiMember.class))}
|
||||
: RefactoringTestUtil.findMembers(sourceClass, membersToFind);
|
||||
|
||||
final int[] countMoved = {0};
|
||||
final MoveMemberListener listener = (aClass, member) -> {
|
||||
@@ -316,7 +322,7 @@ public class PullUpTest extends LightRefactoringTestCase {
|
||||
}
|
||||
|
||||
if (checkMembersMovedCount) {
|
||||
assertEquals(countMoved[0], membersToFind.length);
|
||||
assertEquals(membersToFind.length == 0 ? 1 : membersToFind.length, countMoved[0]);
|
||||
}
|
||||
checkResultByFile(BASE_PATH + getTestName(false) + "_after.java");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user