diff --git a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java index 75403848cbe8..66c4f9da2c4f 100644 --- a/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java +++ b/java/java-analysis-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java @@ -354,6 +354,17 @@ public class DuplicatesFinder { return false; } + if (qualifier1 == null && qualifier2 == null) { + final PsiClass patternClass = RefactoringChangeUtil.getThisClass(pattern); + final PsiClass candidateClass = RefactoringChangeUtil.getThisClass(candidate); + if (resolveResult1 == resolveResult2 && + resolveResult1 instanceof PsiMember && + !InheritanceUtil.isInheritorOrSelf(candidateClass, patternClass, true) && + InheritanceUtil.isInheritorOrSelf(candidateClass, ((PsiMember)resolveResult1).getContainingClass(), true)) { + return false; + } + } + } if (pattern instanceof PsiTypeCastExpression) { diff --git a/java/java-tests/testData/refactoring/methodDuplicates/SkipNonRelatedCalls.java b/java/java-tests/testData/refactoring/methodDuplicates/SkipNonRelatedCalls.java new file mode 100644 index 000000000000..fbda8f3fe7a8 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicates/SkipNonRelatedCalls.java @@ -0,0 +1,16 @@ +class CommonParent { + void foo() {} +} + +public class A extends CommonParent { + + private void f() { + foo(); + } + + private class B extends CommonParent { + void g() { + foo(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesTest.java b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesTest.java index ecabfb08cc83..b841cb71320f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesTest.java @@ -51,6 +51,10 @@ public class FindMethodDuplicatesTest extends FindMethodDuplicatesBaseTest{ doTest(); } + public void testSkipNonRelatedCalls() throws Exception { + doTest(false); + } + public void testMappingAny2ParameterPrimitiveLvalue() throws Exception { doTest(false); }