From 1791683f2715687e1548f2b832b9185afb784072 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 28 Aug 2012 12:49:29 +0400 Subject: [PATCH] inplace rename: delegate qualification to the common method (IDEA-90679) --- .../rename/RenameJavaMemberProcessor.java | 2 +- .../rename/inplace/JavaResolveSnapshot.java | 24 ++---------------- .../renameLocal/RenameInPlaceThisNeeded.java | 25 +++++++++++++++++++ .../RenameInPlaceThisNeeded_after.java | 25 +++++++++++++++++++ .../intellij/refactoring/RenameLocalTest.java | 4 +++ 5 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java create mode 100644 java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMemberProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMemberProcessor.java index f24207a89585..f0c8ec34d296 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMemberProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaMemberProcessor.java @@ -37,7 +37,7 @@ import java.util.Set; public abstract class RenameJavaMemberProcessor extends RenamePsiElementProcessor { private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.rename.RenameJavaMemberProcessor"); - protected static void qualifyMember(PsiMember member, PsiElement occurence, String newName) throws IncorrectOperationException { + public static void qualifyMember(PsiMember member, PsiElement occurence, String newName) throws IncorrectOperationException { qualifyMember(occurence, newName, member.getContainingClass(), member.hasModifierProperty(PsiModifier.STATIC)); } 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 074b03d841ee..bd1c657d813f 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 @@ -20,6 +20,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.refactoring.rename.RenameJavaMemberProcessor; import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.HashMap; @@ -74,28 +75,7 @@ class JavaResolveSnapshot extends ResolveSnapshotProvider.ResolveSnapshot { if (!ref.isQualified() && hidingLocalName.equals(ref.getReferenceName())) { final PsiElement newlyResolved = ref.resolve(); if (referee.getManager().areElementsEquivalent(newlyResolved, referee)) return; - PsiClass refereeClass = ((PsiField) referee).getContainingClass(); - PsiClass referentClass = PsiTreeUtil.getParentOfType(referent, PsiClass.class); - if (refereeClass != null && referentClass != null && - PsiTreeUtil.isAncestor(refereeClass, referentClass, false)) { - if (refereeClass == referentClass || - refereeClass.getName() != null) { //otherwise cannot qualify anonymous referee class - @NonNls String qualifer; - if (RefactoringUtil.isInStaticContext(ref, refereeClass)) { - qualifer = refereeClass.getName(); - } else { - qualifer = refereeClass == referentClass ? "this" : refereeClass.getName() + ".this"; - } - String qualifiedRefText = qualifer + "." + ref.getText(); - PsiElementFactory elementFactory = JavaPsiFacade.getInstance(referentClass.getProject()).getElementFactory(); - try { - PsiReferenceExpression qualifiedRef = (PsiReferenceExpression) elementFactory.createExpressionFromText(qualifiedRefText, null); - ref.replace(qualifiedRef); - } catch (IncorrectOperationException e) { - LOG.error(e); - } - } - } + RenameJavaMemberProcessor.qualifyMember((PsiField)referee, referent, hidingLocalName); } } } diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java new file mode 100644 index 000000000000..2e4c855edf6b --- /dev/null +++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class Test1 { + class A { + int a; + } + class B extends A { + B(int b) { + a = b; + } + } +} diff --git a/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java new file mode 100644 index 000000000000..dcb10a8e5af0 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameLocal/RenameInPlaceThisNeeded_after.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class Test1 { + class A { + int a; + } + class B extends A { + B(int a) { + this.a = a; + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java index 3aeefbe1459d..66e186925ee9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameLocalTest.java @@ -74,6 +74,10 @@ public class RenameLocalTest extends LightRefactoringTestCase { public void testRenameInPlaceQualifyFieldReference() throws Exception { doTestInplaceRename("myI"); } + + public void testRenameInPlaceThisNeeded() throws Exception { + doTestInplaceRename("a"); + } public void testRenameInPlaceParamInOverriderAutomaticRenamer() throws Exception { doTestInplaceRename("pp");