rename: search for conflicts with super classes of container (IDEA-162372)

This commit is contained in:
Anna.Kozlova
2016-10-11 19:09:56 +02:00
parent fc54fc4892
commit ee3492a8f4
4 changed files with 41 additions and 5 deletions
@@ -28,10 +28,7 @@ import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.search.searches.MethodReferencesSearch;
import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.util.MethodSignature;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.psi.util.*;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.RefactoringBundle;
@@ -158,7 +155,8 @@ public class RenameJavaMethodProcessor extends RenameJavaMemberProcessor {
if (!methodAndOverriders.contains(actualMethod)) {
PsiClass outerClass = PsiTreeUtil.getParentOfType(element, PsiClass.class);
while (outerClass != null) {
if (containingClasses.contains(outerClass)) {
PsiClass finalOuterClass = outerClass;
if (containingClasses.stream().anyMatch(psiClass -> InheritanceUtil.isInheritorOrSelf(finalOuterClass, psiClass, true))) {
qualifyMember(element, newName, outerClass, isStatic);
break;
}
@@ -0,0 +1,17 @@
interface ITest {
void act<caret>ion(Object o);
}
class Test implements ITest{
public void action(Object o) {
}
private class ActionHandler {
public void handleAction(Object o, Object o1) {
action(o);
}
}
}
@@ -0,0 +1,17 @@
interface ITest {
void handleAction(Object o);
}
class Test implements ITest{
public void handleAction(Object o) {
}
private class ActionHandler {
public void handleAction(Object o, Object o1) {
Test.this.handleAction(o);
}
}
}
@@ -242,6 +242,10 @@ public class RenameCollisionsTest extends LightRefactoringTestCase {
doTest("T");
}
public void testInnerClassNameCollisionWithSuperClassOfContainer() throws Exception {
doTest("handleAction");
}
private void doTestImpossibleToRename() throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");
PsiElement element = TargetElementUtil