From 62d2417879ef91aae2d839d0172cbbf7498eddcb Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 19 Jan 2017 19:31:58 +0300 Subject: [PATCH] don't qualify with this in static context (IDEA-166793) --- .../util/RefactoringChangeUtil.java | 8 +++++- .../afterConflictingFieldName.java | 26 +++++++++++++++++++ .../beforeConflictingFieldName.java | 26 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterConflictingFieldName.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeConflictingFieldName.java diff --git a/java/java-psi-impl/src/com/intellij/refactoring/util/RefactoringChangeUtil.java b/java/java-psi-impl/src/com/intellij/refactoring/util/RefactoringChangeUtil.java index eebdd17ab745..8ae1dd8e8aca 100644 --- a/java/java-psi-impl/src/com/intellij/refactoring/util/RefactoringChangeUtil.java +++ b/java/java-psi-impl/src/com/intellij/refactoring/util/RefactoringChangeUtil.java @@ -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 { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterConflictingFieldName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterConflictingFieldName.java new file mode 100644 index 000000000000..73805a188610 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/afterConflictingFieldName.java @@ -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; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeConflictingFieldName.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeConflictingFieldName.java new file mode 100644 index 000000000000..d108f89deefc --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsage/beforeConflictingFieldName.java @@ -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) { + 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; + } + } +} \ No newline at end of file