diff --git a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java index 02c42ead0b0b..8abcc9d9da37 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java +++ b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java @@ -406,6 +406,10 @@ public class DuplicatesFinder { if (contextClass != null && InheritanceUtil.isInheritorOrSelf(thisClass, contextClass, true)) { contextClass = thisClass; } + final PsiClass thisCandidate = RefactoringUtil.getThisClass(candidate); + if (thisCandidate != null && InheritanceUtil.isInheritorOrSelf(thisCandidate, contextClass, true)) { + contextClass = thisCandidate; + } return contextClass != null && match.putParameter(parameter, RefactoringUtil.createThisExpression(patternQualifier.getManager(), contextClass)); } diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java new file mode 100644 index 000000000000..3b99a587f204 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java @@ -0,0 +1,14 @@ +public class BaseClass extends JComponent { +} + +class SubClass extends BaseClass { + void a() { + System.out.println(getLocation()); + } +} + +class Util { + public static void method(BaseClass base) { + System.out.println(base.getLocation()); + } +} diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after new file mode 100644 index 000000000000..181a189485cc --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after @@ -0,0 +1,14 @@ +public class BaseClass extends JComponent { +} + +class SubClass extends BaseClass { + void a() { + Util.method(SubClass.this); + } +} + +class Util { + public static void method(BaseClass base) { + System.out.println(base.getLocation()); + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java index 147c3e6c6ed7..cc6e5789936c 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java @@ -49,4 +49,8 @@ public class FindMethodDuplicatesMiscTest extends FindMethodDuplicatesBaseTest { public void testDetectNameConflictsWithStatic() throws Exception { doTest(); } + + public void testCorrectThis() throws Exception { + doTest(); + } } \ No newline at end of file