don't qualify with this in static context (IDEA-166793)

This commit is contained in:
Anna Kozlova
2017-01-20 12:58:34 +03:00
parent 2bb6ba0ace
commit 62d2417879
3 changed files with 59 additions and 1 deletions
@@ -95,7 +95,13 @@ public class RefactoringChangeUtil {
((PsiThisExpression)expressionFromText.getQualifierExpression()).getQualifier().replace(factory.createClassReferenceElement(parentClass));
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("this." + member.getName(), null);
final PsiModifierListOwner staticElement = PsiUtil.getEnclosingStaticElement(referenceExpression, null);
if (staticElement != null && containingClass != null && !PsiTreeUtil.isAncestor(staticElement, containingClass, false)) {
return referenceExpression;
}
else {
expressionFromText = (PsiReferenceExpression)factory.createExpressionFromText("this." + member.getName(), null);
}
}
}
else {
@@ -0,0 +1,26 @@
// "Add 'C2' as 2nd parameter to method 'f'" "true"
final class X {
public static final class C2 { }
public static final class C {
public static void main(String[] argArr) {
final C2 c2 = new C2();
final C c = f(123, c2);
}
public static C f(final int i, C2 c2) {
return new C(i, c2);
}
private final int i;
private final C2 c2;
private C(final int i, C2 c2) {
this.i = i;
this.c2 = c2;
}
}
}
@@ -0,0 +1,26 @@
// "Add 'C2' as 2nd parameter to method 'f'" "true"
final class X {
public static final class C2 { }
public static final class C {
public static void main(String[] argArr) {
final C2 c2 = new C2();
final C c = f(123, <caret>c2);
}
public static C f(final int i) {
return new C(i, c2);
}
private final int i;
private final C2 c2;
private C(final int i, C2 c2) {
this.i = i;
this.c2 = c2;
}
}
}