From 36761cbb63567c2b5bd818b1b4dc16a493a6e4c0 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 24 Jul 2020 09:43:43 +0200 Subject: [PATCH] inline method: search all overriding methods GitOrigin-RevId: 2c561e3a4a86bf6eedb69f2177ca310b2d8b1590 --- .../refactoring/inline/InlineMethodProcessor.java | 10 ++++++++-- .../psi/search/searches/OverridingMethodsSearch.java | 3 +++ .../inlineMethod/DeleteOverrideAnnotations.java | 9 +++++++++ .../inlineMethod/DeleteOverrideAnnotations.java.after | 7 +++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index 2df3d6b0c562..631309f4cbf7 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -147,8 +147,14 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { usages.add(new UsageInfo(reference.getElement())); } - OverridingMethodsSearch.search(myMethod, myRefactoringScope, false).forEach(method -> { - usages.add(new UsageInfo(method)); + OverridingMethodsSearch.search(myMethod, myRefactoringScope, true).forEach(method -> { + for (HierarchicalMethodSignature signature : method.getHierarchicalMethodSignature().getSuperSignatures()) { + if (signature.getMethod() == myMethod) { + usages.add(new UsageInfo(method)); + return true; + } + } + return true; }); diff --git a/java/java-indexing-api/src/com/intellij/psi/search/searches/OverridingMethodsSearch.java b/java/java-indexing-api/src/com/intellij/psi/search/searches/OverridingMethodsSearch.java index ef050a628dc9..42491483ed34 100644 --- a/java/java-indexing-api/src/com/intellij/psi/search/searches/OverridingMethodsSearch.java +++ b/java/java-indexing-api/src/com/intellij/psi/search/searches/OverridingMethodsSearch.java @@ -45,6 +45,9 @@ public final class OverridingMethodsSearch extends ExtensibleQueryFactory search(@NotNull PsiMethod method, @NotNull SearchScope scope, final boolean checkDeep) { if (ReadAction.compute(() -> !PsiUtil.canBeOverridden(method))) return EmptyQuery.getEmptyQuery(); // Optimization diff --git a/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java b/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java index dd1e04e6d905..b0e55ca3c31c 100644 --- a/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java +++ b/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java @@ -14,4 +14,13 @@ class B extends A { class C extends B { @Override void foo() {} +} + +class B1 extends A { + @Override + void foo() {} + + void err() { + super.foo(); + } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java.after b/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java.after index eac5af8b33db..46c63bb2c219 100644 --- a/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java.after +++ b/java/java-tests/testData/refactoring/inlineMethod/DeleteOverrideAnnotations.java.after @@ -11,4 +11,11 @@ class B extends A { class C extends B { @Override void foo() {} +} + +class B1 extends A { + void foo() {} + + void err() { + } } \ No newline at end of file