java: move default method from interface to class fixed (IDEA-222011)

GitOrigin-RevId: bcbbd067b274b0267d1305dc0551d499b394a6e4
This commit is contained in:
Anna Kozlova
2021-05-04 15:53:11 +00:00
committed by intellij-monorepo-bot
parent a07b56e42c
commit 21fdf34ab7
4 changed files with 23 additions and 1 deletions
@@ -301,8 +301,8 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
}
try {
final PsiModifierList modifierList = patternMethod.getModifierList();
if (myTargetClass.isInterface()) {
final PsiModifierList modifierList = patternMethod.getModifierList();
if (!PsiUtil.isLanguageLevel8OrHigher(myTargetClass)) {
patternMethod.getBody().delete();
modifierList.setModifierProperty(PsiModifier.DEFAULT, false);
@@ -312,6 +312,10 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
}
RefactoringUtil.makeMethodAbstract(myTargetClass, patternMethod);
}
else if (myMethod.hasModifierProperty(PsiModifier.DEFAULT)) {
modifierList.setModifierProperty(PsiModifier.DEFAULT, false);
VisibilityUtil.setVisibility(modifierList, PsiModifier.PUBLIC);
}
final PsiMethod method = addMethodToClass(myTargetClass, patternMethod, false);
myMethod.delete();
@@ -0,0 +1,7 @@
class Foo {
}
interface Bar {
default void ba<caret>z(Foo foo) {}
void grault(Foo foo);
}
@@ -0,0 +1,7 @@
class Foo {
public void baz() {}
}
interface Bar {
void grault(Foo foo);
}
@@ -92,6 +92,10 @@ public class MoveInstanceMethodTest extends LightRefactoringTestCase {
doTest(true, 0);
}
public void testDefaultInClass() {
doTest(true, 0);
}
public void testQualifyFieldAccess() {
doTest(false, 0);
}