From 01211f6b08fcdba5aae93d3904b83e44fd405018 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 26 Jun 2018 10:53:34 +0300 Subject: [PATCH] safe delete: process sibling methods (IDEA-111337) --- .../safeDelete/JavaSafeDeleteProcessor.java | 2 ++ .../DeleteParameterOfASiblingMethod.java | 16 ++++++++++++++++ .../DeleteParameterOfASiblingMethod_after.java | 16 ++++++++++++++++ .../java/refactoring/SafeDeleteTest.java | 4 ++++ 4 files changed, 38 insertions(+) create mode 100644 java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod.java create mode 100644 java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java index 2e36f7e5c137..d42979f7e5a6 100644 --- a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java @@ -31,6 +31,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; +import com.intellij.psi.impl.FindSuperElementsHelper; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.FunctionalExpressionSearch; @@ -149,6 +150,7 @@ public class JavaSafeDeleteProcessor extends SafeDeleteProcessorDelegateBase { if (superMethods.isEmpty()) { superMethods.add(method); } + ContainerUtil.addAllNotNull(superMethods, FindSuperElementsHelper.getSiblingInheritedViaSubClass(method)); for (PsiMethod superMethod : superMethods) { parametersToDelete.add(superMethod.getParameterList().getParameters()[parameterIndex]); OverridingMethodsSearch.search(superMethod).forEach(overrider -> { diff --git a/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod.java b/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod.java new file mode 100644 index 000000000000..338ac7cb7e80 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod.java @@ -0,0 +1,16 @@ + +interface Z { + void foo(int a); +} + +class A { + public void foo(int a) { + } +} + +class B extends A implements Z { + @Override + public void foo(int a) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod_after.java b/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod_after.java new file mode 100644 index 000000000000..d62ca009f109 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/DeleteParameterOfASiblingMethod_after.java @@ -0,0 +1,16 @@ + +interface Z { + void foo(); +} + +class A { + public void foo() { + } +} + +class B extends A implements Z { + @Override + public void foo() { + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java index a0d7f55a71d8..29ffe543ab02 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/SafeDeleteTest.java @@ -98,6 +98,10 @@ public class SafeDeleteTest extends MultiFileTestCase { doSingleFileTest(); } + public void testDeleteParameterOfASiblingMethod() throws Exception { + doSingleFileTest(); + } + public void testDeleteMethodCascade() throws Exception { doSingleFileTest(); }