From f5abe711238a901297dd82073b4339d26ee2f6fa Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 24 Jan 2013 19:21:57 +0400 Subject: [PATCH] rename: do not qualify refs to fields with this in static context --- .../refactoring/rename/inplace/JavaResolveSnapshot.java | 5 +++-- .../renameLocal/RenameToFieldNameInStaticContext.java | 7 +++++++ .../RenameToFieldNameInStaticContext_after.java | 7 +++++++ .../testSrc/com/intellij/refactoring/RenameLocalTest.java | 4 ++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext.java create mode 100644 java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/rename/inplace/JavaResolveSnapshot.java b/java/java-impl/src/com/intellij/refactoring/rename/inplace/JavaResolveSnapshot.java index 2eb97dac7918..900cd9d5cb44 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/inplace/JavaResolveSnapshot.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/inplace/JavaResolveSnapshot.java @@ -43,8 +43,9 @@ class JavaResolveSnapshot extends ResolveSnapshotProvider.ResolveSnapshot { scope.accept(new JavaRecursiveElementWalkingVisitor() { @Override public void visitReferenceExpression(PsiReferenceExpression refExpr) { if (!refExpr.isQualified()) { - PsiElement resolved = refExpr.resolve(); - if (resolved instanceof PsiField) { + JavaResolveResult resolveResult = refExpr.advancedResolve(false); + final PsiElement resolved = resolveResult.getElement(); + if (resolved instanceof PsiField && resolveResult.isStaticsScopeCorrect()) { SmartPsiElementPointer key = pointerManager.createSmartPsiElementPointer(refExpr); SmartPsiElementPointer value = pointers.get(resolved); if (value == null) { diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext.java b/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext.java new file mode 100644 index 000000000000..7fc1574ce187 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext.java @@ -0,0 +1,7 @@ +class Test { + String myFoo; + static { + String foo = ""; + System.out.println(myFoo); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext_after.java new file mode 100644 index 000000000000..6d3f3b994262 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameLocal/RenameToFieldNameInStaticContext_after.java @@ -0,0 +1,7 @@ +class Test { + String myFoo; + static { + String myFoo = ""; + System.out.println(myFoo); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java index a57526b3e9ba..c254828e4d36 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java @@ -109,6 +109,10 @@ public class RenameLocalTest extends LightRefactoringTestCase { doTestInplaceRename("r1"); } + public void testRenameToFieldNameInStaticContext() throws Exception { + doTestInplaceRename("myFoo"); + } + public void testRenameInPlaceInStaticContextWithConflictingField() throws Exception { doTestInplaceRename("s"); }