inline super: push class initializers as well (IDEA-172790)

This commit is contained in:
Anna.Kozlova
2018-08-07 13:32:28 +02:00
parent 800141ab4b
commit eed3a9b8da
6 changed files with 44 additions and 2 deletions
@@ -329,6 +329,9 @@ public class JavaPushDownDelegate extends PushDownDelegate<MemberInfo, PsiMember
newMember = (PsiMember)targetClass.add(member);
}
}
else if (member instanceof PsiClassInitializer) {
newMember = (PsiMember)targetClass.add(member);
}
if (newMember != null) {
decodeRefs(sourceClass, newMember, targetClass);
@@ -348,7 +351,7 @@ public class JavaPushDownDelegate extends PushDownDelegate<MemberInfo, PsiMember
for (MemberInfoBase<? extends PsiElement> memberInfo : pushDownData.getMembersToMove()) {
final PsiElement member = memberInfo.getMember();
if (member instanceof PsiField) {
if (member instanceof PsiField || member instanceof PsiClassInitializer) {
member.delete();
}
else if (member instanceof PsiMethod) {
@@ -20,9 +20,9 @@ import com.intellij.psi.*;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.classMembers.MemberInfoBase;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -79,6 +79,11 @@ public class MemberInfo extends MemberInfoBase<PsiMember> {
}
isStatic = aClass.hasModifierProperty(PsiModifier.STATIC);
}
else if (member instanceof PsiClassInitializer) {
isStatic = member.hasModifierProperty(PsiModifier.STATIC);
overrides = null;
displayName = isStatic ? "static {...}" : "{...}";
}
else {
LOG.assertTrue(false);
isStatic = false;
@@ -129,6 +134,12 @@ public class MemberInfo extends MemberInfoBase<PsiMember> {
result.add(new MemberInfo(field));
}
}
for (PsiClassInitializer initializer : subclass.getInitializers()) {
if (filter.includeMember(initializer)) {
result.add(new MemberInfo(initializer));
}
}
}
private static void extractSuperInterfaces(final PsiClass subclass,
@@ -0,0 +1,13 @@
class Test {
static {
System.out.println("static");
}
{
System.out.println("instance");
}
void foo() {
Test s = new Test();
}
}
@@ -0,0 +1,9 @@
class Super {
{
System.out.println("instance");
}
static {
System.out.println("static");
}
}
@@ -0,0 +1,5 @@
class Test extends Super{
void foo() {
Super s = new Super();
}
}
@@ -53,6 +53,7 @@ public class InlineSuperClassTest extends MultiFileTestCase {
public void testConflictMultipleConstructors() { doTest(true, false); }
public void testMultipleConstructors() { doTest(); }
public void testImplicitChildConstructor() { doTest(); }
public void testClassInitializers() { doTest(); }
public void testStaticMembers() { doTest(); }
public void testSuperReference() { doTest(); }
public void testInnerClassReference() { doTest(); }