rename: context class should be chosen when qualify conflict ref (IDEA-83928)

This commit is contained in:
anna
2012-04-04 16:23:52 +02:00
parent db78c2d427
commit f7e384c39d
4 changed files with 34 additions and 1 deletions

View File

@@ -87,9 +87,14 @@ public abstract class RenameJavaMemberProcessor extends RenamePsiElementProcesso
ref = (PsiReferenceExpression)factory.createExpressionFromText("this." + name, context);
return ref;
}
while (contextClass != null && !InheritanceUtil.isInheritorOrSelf(contextClass, containingClass, true)) {
contextClass = PsiTreeUtil.getParentOfType(contextClass, PsiClass.class, true);
}
ref = (PsiReferenceExpression) factory.createExpressionFromText("A.this." + name, null);
qualifier = ((PsiThisExpression)ref.getQualifierExpression()).getQualifier();
final PsiJavaCodeReferenceElement classReference = factory.createClassReferenceElement(containingClass);
final PsiJavaCodeReferenceElement classReference = factory.createClassReferenceElement(contextClass != null ? contextClass : containingClass);
qualifier.replace(classReference);
}
return ref;

View File

@@ -0,0 +1,12 @@
class A {
boolean _g<caret>g;
}
class B extends A {
class FF {
public void setGG(boolean gg) {
_gg = gg;
}
}
}

View File

@@ -0,0 +1,12 @@
class A {
boolean gg;
}
class B extends A {
class FF {
public void setGG(boolean gg) {
B.this.gg = gg;
}
}
}

View File

@@ -184,6 +184,10 @@ public class RenameCollisionsTest extends LightRefactoringTestCase {
public void testRenameStaticMethodTypeParameter() throws Exception {
doTest("E");
}
public void testRenameFieldInSuper() throws Exception {
doTest("gg");
}
private void doTest(final String newName) throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");