convert to instance: resolve conflicting names (IDEA-144265)

This commit is contained in:
Anna Kozlova
2015-08-28 21:05:45 +03:00
parent d108781b35
commit 03ab26830f
4 changed files with 47 additions and 2 deletions
@@ -333,8 +333,8 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor {
final PsiReference reference = usage.getReferenceExpression();
if (reference instanceof PsiReferenceExpression) {
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)reference;
if (referenceExpression.getParent() instanceof PsiReferenceExpression) {
// todo: check for correctness
PsiElement parent = referenceExpression.getParent();
if (parent instanceof PsiReferenceExpression && sameUnqualified(parent)) {
referenceExpression.delete();
}
else {
@@ -350,6 +350,16 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor {
}
}
private static boolean sameUnqualified(PsiElement parent) {
PsiElement resolve = ((PsiReferenceExpression)parent).resolve();
if (resolve instanceof PsiField) {
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(resolve.getProject());
final PsiExpression unqualifiedFieldReference = elementFactory.createExpressionFromText(((PsiField)resolve).getName(), parent);
return resolve == ((PsiReferenceExpression)unqualifiedFieldReference).resolve();
}
return true;
}
private void processMethodCall(MethodCallUsageInfo usageInfo) throws IncorrectOperationException {
PsiMethodCallExpression methodCall = usageInfo.getMethodCall();
PsiParameterList parameterList = myMethod.getParameterList();
@@ -0,0 +1,15 @@
class Foo {
public String bar;
private String baz;
public static void set<caret>Bar(Foo foo, String bar) {
foo.bar = bar;
foo.baz = bar;
foo.bar();
}
private void bar() {
}
}
@@ -0,0 +1,15 @@
class Foo {
public String bar;
private String baz;
public void setBar(String bar) {
this.bar = bar;
baz = bar;
bar();
}
private void bar() {
}
}
@@ -35,6 +35,11 @@ public class ConvertToInstanceMethodTest extends LightRefactoringTestCase {
public void testInterfaceTypeParameter() throws Exception { doTest(0); }
public void testJavadocParameter() throws Exception { doTest(0); }
public void testConflictingParameterName() throws Exception {
doTest(0);
}
public void testVisibilityConflict() throws Exception {
try {
doTest(0, PsiModifier.PRIVATE);