{
}
return true;
}
+
+ public void dispose() {
+ for (PsiLanguageInjectionHost.Shred shred : this) {
+ shred.getHostRangeMarker().dispose();
+ }
+ }
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java
index f8174fc869b2..fa324b0344e2 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java
@@ -65,10 +65,8 @@ import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.*;
import java.util.List;
-import java.util.Set;
/**
* @author Konstantin Bulenkov
@@ -370,16 +368,30 @@ public abstract class ChangeSignatureDialogBase>(myParametersTableModel) {
+
+ public void removeEditor() {
+ clearEditorListeners();
+ super.removeEditor();
+ }
+
@Override
public void editingStopped(ChangeEvent e) {
super.editingStopped(e);
repaint(); // to update disabled cells background
}
- @Nullable
- @Override
- public TableCellEditor getCellEditor(final int row, final int column) {
- final TableCellEditor editor = super.getCellEditor(row, column);
+ private void clearEditorListeners() {
+ final TableCellEditor editor = getCellEditor();
+ if (editor instanceof StringTableCellEditor) {
+ final StringTableCellEditor ed = (StringTableCellEditor)editor;
+ ed.clearListeners();
+ }
+ else if (editor instanceof CodeFragmentTableCellEditorBase) {
+ ((CodeFragmentTableCellEditorBase)editor).clearListeners();
+ }
+ }
+
+ public Component prepareEditor(final TableCellEditor editor, final int row, final int column) {
final DocumentAdapter listener = new DocumentAdapter() {
@Override
public void documentChanged(DocumentEvent e) {
@@ -400,7 +412,7 @@ public abstract class ChangeSignatureDialogBase
SELECT_ALL = Key.create("rename.selectAll");
private final Set myHandlers = new HashSet();
private static final RenameHandlerRegistry INSTANCE = new RenameHandlerRegistry();
private final PsiElementRenameHandler myDefaultElementRenameHandler;
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
index 95e58024e488..97e5dea66d97 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
@@ -209,6 +209,9 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer {
}
finally {
FinishMarkAction.finish(myProject, myEditor, markAction);
+ if (myBeforeRevert != null) {
+ myEditor.getCaretModel().moveToOffset(myBeforeRevert.getEndOffset());
+ }
}
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
index 0fb1a7c312a4..8bfcb777245d 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
@@ -15,6 +15,8 @@
*/
package com.intellij.refactoring.rename.inplace;
+import com.intellij.codeInsight.completion.InsertHandler;
+import com.intellij.codeInsight.completion.InsertionContext;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl;
import com.intellij.codeInsight.highlighting.HighlightManager;
@@ -72,10 +74,7 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.rename.AutomaticRenamingDialog;
-import com.intellij.refactoring.rename.NameSuggestionProvider;
-import com.intellij.refactoring.rename.RenameProcessor;
-import com.intellij.refactoring.rename.RenameUtil;
+import com.intellij.refactoring.rename.*;
import com.intellij.refactoring.rename.naming.AutomaticRenamer;
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory;
import com.intellij.refactoring.util.CommonRefactoringUtil;
@@ -116,6 +115,7 @@ public class VariableInplaceRenamer {
private RangeMarker myRenameOffset;
private String myInitialName;
protected final String myOldName;
+ protected RangeMarker myBeforeRevert = null;
public void setAdvertisementText(String advertisementText) {
myAdvertisementText = advertisementText;
@@ -347,6 +347,13 @@ public class VariableInplaceRenamer {
});
}
}
+ final int currentOffset = myEditor.getCaretModel().getOffset();
+ myBeforeRevert = myRenameOffset != null && myRenameOffset.getEndOffset() >= currentOffset && myRenameOffset.getStartOffset() <= currentOffset
+ ? myEditor.getDocument().createRangeMarker(myRenameOffset.getStartOffset(), currentOffset)
+ : null;
+ if (myBeforeRevert != null) {
+ myBeforeRevert.setGreedyToRight(true);
+ }
restoreStateBeforeTemplateIsFinished();
}
@@ -361,6 +368,9 @@ public class VariableInplaceRenamer {
final Runnable runnable = new Runnable() {
public void run() {
performRefactoringRename(myNewName, context, markAction);
+ if (myBeforeRevert != null) {
+ myBeforeRevert.dispose();
+ }
}
};
if (ApplicationManager.getApplication().isUnitTestMode()){
@@ -373,6 +383,9 @@ public class VariableInplaceRenamer {
finally {
if (!bind) {
FinishMarkAction.finish(myProject, myEditor, markAction);
+ if (myBeforeRevert != null) {
+ myBeforeRevert.dispose();
+ }
}
}
}
@@ -451,7 +464,8 @@ public class VariableInplaceRenamer {
}
protected boolean shouldSelectAll() {
- return false;
+ final Boolean selectAll = myEditor.getUserData(RenameHandlerRegistry.SELECT_ALL);
+ return selectAll != null && selectAll.booleanValue();
}
protected void navigateToAlreadyStarted(Document oldDocument, int exitCode) {
@@ -812,7 +826,21 @@ public class VariableInplaceRenamer {
myLookupItems = new LookupElement[names.size()];
final Iterator iterator = names.iterator();
for (int i = 0; i < myLookupItems.length; i++) {
- myLookupItems[i] = LookupElementBuilder.create(iterator.next());
+ final String suggestion = iterator.next();
+ myLookupItems[i] = LookupElementBuilder.create(suggestion).setInsertHandler(new InsertHandler() {
+ @Override
+ public void handleInsert(InsertionContext context, LookupElement item) {
+ if (shouldSelectAll()) return;
+ final Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(myEditor);
+ final TemplateState templateState = TemplateManagerImpl.getTemplateState(topLevelEditor);
+ if (templateState != null) {
+ final TextRange range = templateState.getCurrentVariableRange();
+ if (range != null) {
+ topLevelEditor.getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), suggestion);
+ }
+ }
+ }
+ });
}
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/CodeFragmentTableCellEditorBase.java b/platform/lang-impl/src/com/intellij/refactoring/ui/CodeFragmentTableCellEditorBase.java
index 43992784627e..df3d169be6d1 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/ui/CodeFragmentTableCellEditorBase.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/ui/CodeFragmentTableCellEditorBase.java
@@ -86,4 +86,8 @@ public class CodeFragmentTableCellEditorBase extends AbstractCellEditor implemen
public void addDocumentListener(DocumentListener listener) {
myListeners.add(listener);
}
+
+ public void clearListeners() {
+ myListeners.clear();
+ }
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/StringTableCellEditor.java b/platform/lang-impl/src/com/intellij/refactoring/ui/StringTableCellEditor.java
index 5b4fc97686db..b967c0f69bb5 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/ui/StringTableCellEditor.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/ui/StringTableCellEditor.java
@@ -62,4 +62,8 @@ public class StringTableCellEditor extends AbstractCellEditor implements TableCe
public void addDocumentListener(DocumentListener listener) {
myListeners.add(listener);
}
+
+ public void clearListeners() {
+ myListeners.clear();
+ }
}
diff --git a/platform/lvcs-impl/lvcs-impl.iml b/platform/lvcs-impl/lvcs-impl.iml
index 9044be554b58..c717b082bab8 100644
--- a/platform/lvcs-impl/lvcs-impl.iml
+++ b/platform/lvcs-impl/lvcs-impl.iml
@@ -4,17 +4,13 @@
-
-
-
-
diff --git a/platform/platform-api/platform-api.iml b/platform/platform-api/platform-api.iml
index 5f7e717d2212..96bc786658ac 100644
--- a/platform/platform-api/platform-api.iml
+++ b/platform/platform-api/platform-api.iml
@@ -4,7 +4,6 @@
-
@@ -19,7 +18,6 @@
-
@@ -29,7 +27,6 @@
-