pull up default method: leave as is if pulled as abstract (IDEA-151756)

This commit is contained in:
Anna.Kozlova
2016-04-27 11:10:23 +02:00
parent 54f1e34d91
commit 1dc6f156cf
6 changed files with 42 additions and 2 deletions
@@ -227,7 +227,7 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
method.findSuperMethods(myTargetSuperClass).length == 0) {
deleteOverrideAnnotationIfFound(methodCopy);
}
boolean isOriginalMethodAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.DEFAULT);
boolean isOriginalMethodAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT);
if (myIsTargetInterface || info.isToAbstract()) {
ChangeContextUtil.clearContextInfo(method);
@@ -235,7 +235,11 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
//pull as default
RefactoringUtil.makeMethodDefault(methodCopy);
isOriginalMethodAbstract = true;
} else {
}
else {
if (info.isToAbstract() && method.hasModifierProperty(PsiModifier.DEFAULT)) {
PsiUtil.setModifierProperty(methodCopy, PsiModifier.DEFAULT, false);
}
RefactoringUtil.makeMethodAbstract(myTargetSuperClass, methodCopy);
}
@@ -0,0 +1,6 @@
interface A {}
interface B extends A {
default void f<caret>oo() {
System.out.println("in B");
}
}
@@ -0,0 +1,9 @@
interface A {
void foo();
}
interface B extends A {
@Override
default void foo() {
System.out.println("in B");
}
}
@@ -0,0 +1,6 @@
interface A {}
interface B extends A {
default void f<caret>oo() {
System.out.println("in B");
}
}
@@ -0,0 +1,7 @@
interface A {
default void foo() {
System.out.println("in B");
}
}
interface B extends A {
}
@@ -178,6 +178,14 @@ public class PullUpTest extends LightRefactoringTestCase {
doTest(false, "Class <b><code>Test.Printer</code></b> already contains a method <b><code>foo()</code></b>", new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class));
}
public void testDefaultMethodAsAbstract() throws Exception {
doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, true));
}
public void testDefaultMethodAsDefault() throws Exception {
doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, false));
}
public void testPublicMethodFromPrivateClassConflict() {
doTest(false, new RefactoringTestUtil.MemberDescriptor("HM", PsiClass.class), new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class));
}