inplace prefix rename: work anywhere
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Wed, 14 Jul 2010 12:36:05 +0000 (16:36 +0400)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Thu, 15 Jul 2010 08:39:04 +0000 (12:39 +0400)
platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightFixtureTestCase.java

index 9b64ad92dc41a67a488f4605a1e27ee89742a137..a3338516004542c0cbee6c0cc9f5ca7a562f2bba 100644 (file)
@@ -162,12 +162,13 @@ public class VariableInplaceRenamer {
     final TemplateBuilderImpl builder = new TemplateBuilderImpl(scope);
 
     PsiElement nameIdentifier = myElementToRename instanceof PsiNameIdentifierOwner ? ((PsiNameIdentifierOwner)myElementToRename).getNameIdentifier() : null;
-    PsiElement selectedElement = getSelectedInEditorElement(nameIdentifier, refs, myEditor.getCaretModel().getOffset());
+    int offset = myEditor.getCaretModel().getOffset();
+    PsiElement selectedElement = getSelectedInEditorElement(nameIdentifier, refs, offset);
     if (!CommonRefactoringUtil.checkReadOnlyStatus(myProject, myElementToRename)) return true;
 
     if (nameIdentifier != null) addVariable(nameIdentifier, selectedElement, builder);
     for (PsiReference ref : refs) {
-      addVariable(ref, selectedElement, builder);
+      addVariable(ref, selectedElement, builder, offset);
     }
     
     final PsiElement scope1 = scope;
@@ -379,8 +380,9 @@ public class VariableInplaceRenamer {
     return range.getStartOffset() <= offset && offset <= range.getEndOffset();
   }
 
-  private void addVariable(final PsiReference reference, final PsiElement selectedElement, final TemplateBuilderImpl builder) {
-    if (reference.getElement() == selectedElement) {
+  private void addVariable(final PsiReference reference, final PsiElement selectedElement, final TemplateBuilderImpl builder, int offset) {
+    if (reference.getElement() == selectedElement &&
+        contains(reference.getRangeInElement().shiftRight(selectedElement.getTextRange().getStartOffset()), offset)) {
       Expression expression = new MyExpression(myElementToRename.getName());
       builder.replaceElement(reference, PRIMARY_VARIABLE_NAME, expression, true);
     }
index b46e82c6a23519817f5c0445e80923f9d8752f84..d7ee23de8b29148db62a2e8ad951947f55f54f8e 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.testFramework.fixtures;
 
 import com.intellij.openapi.application.PathManager;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
 import com.intellij.testFramework.UsefulTestCase;
 import com.intellij.testFramework.builders.EmptyModuleFixtureBuilder;
 import org.jetbrains.annotations.NonNls;
@@ -73,4 +74,8 @@ public abstract class CodeInsightFixtureTestCase extends UsefulTestCase {
   protected final String getTestDataPath() {
     return PathManager.getHomePath().replace(File.separatorChar, '/') + getBasePath();
   }
+
+  protected Project getProject() {
+    return myFixture.getProject();
+  }
 }