From f30035d6556fea485cf893be6f3a2cb80dc3a828 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 27 Jan 2023 12:20:33 +0100 Subject: [PATCH] Java: don't add abstract modifier to interface methods when pulling up methods GitOrigin-RevId: df0c5de380b00f2d42e073a15f4472d52cb34470 --- .../com/intellij/refactoring/util/RefactoringUtil.java | 4 +++- .../pullUp/NoAbstractModifiersOnInterfaceMethods.java | 8 ++++++++ .../NoAbstractModifiersOnInterfaceMethods_after.java | 9 +++++++++ .../com/intellij/java/refactoring/PullUpTest.java | 4 ++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods.java create mode 100644 java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods_after.java diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java index cedf1eb29095..95fb44b8d8c6 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -383,7 +383,9 @@ public final class RefactoringUtil { body.delete(); } - PsiUtil.setModifierProperty(method, PsiModifier.ABSTRACT, true); + if (!targetClass.isInterface()) { + PsiUtil.setModifierProperty(method, PsiModifier.ABSTRACT, true); + } } if (!targetClass.isInterface()) { diff --git a/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods.java b/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods.java new file mode 100644 index 000000000000..dc5ac306f8d2 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods.java @@ -0,0 +1,8 @@ +interface Foo1 { + void foo(); +} +class Bar implements Foo1 { + public void foo() { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods_after.java b/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods_after.java new file mode 100644 index 000000000000..4e8ef2ba5b3d --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/NoAbstractModifiersOnInterfaceMethods_after.java @@ -0,0 +1,9 @@ +interface Foo1 { + void foo(); +} +class Bar implements Foo1 { + @Override + public void foo() { + System.out.println("hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java index 42615d717b94..464ea650485c 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java @@ -35,6 +35,10 @@ public class PullUpTest extends LightRefactoringTestCase { doTest(new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, true)); } + public void testNoAbstractModifiersOnInterfaceMethods() { + doTest(new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, true)); + } + public void testQualifiedReference() { // IDEADEV-25008 doTest(new RefactoringTestUtil.MemberDescriptor("x", PsiField.class), new RefactoringTestUtil.MemberDescriptor("getX", PsiMethod.class),