From 21fdf34ab705ab94b163d99e35adb0240c3ba341 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 4 May 2021 14:45:10 +0200 Subject: [PATCH] java: move default method from interface to class fixed (IDEA-222011) GitOrigin-RevId: bcbbd067b274b0267d1305dc0551d499b394a6e4 --- .../moveInstanceMethod/MoveInstanceMethodProcessor.java | 6 +++++- .../refactoring/moveInstanceMethod/DefaultInClass.java | 7 +++++++ .../moveInstanceMethod/DefaultInClass.java.after | 7 +++++++ .../refactoring/moveMethod/MoveInstanceMethodTest.java | 4 ++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java create mode 100644 java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java index 6f177aec710c..8e8b978dccac 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodProcessor.java @@ -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(); diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java b/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java new file mode 100644 index 000000000000..a7db239b85e0 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java @@ -0,0 +1,7 @@ +class Foo { +} +interface Bar { + default void baz(Foo foo) {} + + void grault(Foo foo); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java.after b/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java.after new file mode 100644 index 000000000000..2a0573ca20d8 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveInstanceMethod/DefaultInClass.java.after @@ -0,0 +1,7 @@ +class Foo { + public void baz() {} +} +interface Bar { + + void grault(Foo foo); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/moveMethod/MoveInstanceMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/moveMethod/MoveInstanceMethodTest.java index 3e6302dd76fc..996857466a70 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/moveMethod/MoveInstanceMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/moveMethod/MoveInstanceMethodTest.java @@ -92,6 +92,10 @@ public class MoveInstanceMethodTest extends LightRefactoringTestCase { doTest(true, 0); } + public void testDefaultInClass() { + doTest(true, 0); + } + public void testQualifyFieldAccess() { doTest(false, 0); }