push down: show conflict if method already exist in target class when super signature was generics (IDEA-155578)

This commit is contained in:
Anna.Kozlova
2016-05-04 19:27:10 +02:00
parent 5965c21f44
commit efa0c5c53b
4 changed files with 25 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.RefactoringConflictsUtil;
@@ -157,7 +158,7 @@ public class PushDownConflicts {
assert modifierList != null;
if (!modifierList.hasModifierProperty(PsiModifier.ABSTRACT)) {
PsiMethod method = (PsiMethod)movedMember;
final PsiMethod overrider = targetClass.findMethodBySignature(method, false);
final PsiMethod overrider = MethodSignatureUtil.findMethodBySuperMethod(targetClass, method, false);
if (overrider != null) {
String message = RefactoringBundle.message("0.is.already.overridden.in.1",
RefactoringUIUtil.getDescription(method, true), RefactoringUIUtil.getDescription(targetClass, false));

View File

@@ -0,0 +1,11 @@
class Parent<T> {
public void fo<caret>o(T p) {
System.out.println("a");
}
}
class Child extends Parent {
public void foo(Object p) {
System.out.println("b");
}
}

View File

@@ -0,0 +1,8 @@
class Parent<T> {
}
class Child extends Parent {
public void foo(Object p) {
System.out.println("b");
}
}

View File

@@ -83,6 +83,10 @@ public class PushDownTest extends LightRefactoringTestCase {
doTest();
}
public void testAlreadyContainsMethodWithTheSignatureForGenericsSuperclass() throws Exception {
doTest(true);
}
private void doTest() {
doTest(false);
}