inplace -> dialog rename: preserve typed text (IDEA-130452)

This commit is contained in:
Anna Kozlova
2014-10-02 17:46:29 +02:00
parent 63b15b5304
commit 36be9ac083
3 changed files with 22 additions and 8 deletions
@@ -31,6 +31,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.SuggestedNameInfo;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler;
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory;
import com.intellij.refactoring.ui.NameSuggestionsField;
import com.intellij.refactoring.ui.RefactoringDialog;
@@ -143,7 +144,7 @@ public class RenameDialog extends RefactoringDialog {
protected void createNewNameComponent() {
String[] suggestedNames = getSuggestedNames();
myOldName = suggestedNames.length > 0 ? suggestedNames[0] : null;
myOldName = UsageViewUtil.getShortName(myPsiElement);
myNameSuggestionsField = new NameSuggestionsField(suggestedNames, myProject, FileTypes.PLAIN_TEXT, myEditor) {
@Override
protected boolean shouldSelectAll() {
@@ -173,6 +174,10 @@ public class RenameDialog extends RefactoringDialog {
public String[] getSuggestedNames() {
final LinkedHashSet<String> result = new LinkedHashSet<String>();
final String initialName = VariableInplaceRenameHandler.getInitialName();
if (initialName != null) {
result.add(initialName);
}
result.add(UsageViewUtil.getShortName(myPsiElement));
final NameSuggestionProvider[] providers = Extensions.getExtensions(NameSuggestionProvider.EP_NAME);
for(NameSuggestionProvider provider: providers) {
@@ -68,7 +68,7 @@ public class MemberInplaceRenameHandler extends VariableInplaceRenameHandler {
final MemberInplaceRenamer renamer = createMemberRenamer(element, (PsiNameIdentifierOwner)elementToRename, editor);
boolean startedRename = renamer.performInplaceRename();
if (!startedRename) {
performDialogRename(elementToRename, editor, dataContext);
performDialogRename(elementToRename, editor, dataContext, renamer.myInitialName);
}
}
});
@@ -85,7 +85,7 @@ public class MemberInplaceRenameHandler extends VariableInplaceRenameHandler {
}
}
}
performDialogRename(elementToRename, editor, dataContext);
performDialogRename(elementToRename, editor, dataContext, null);
return null;
}
@@ -21,12 +21,11 @@ import com.intellij.lang.LanguageRefactoringSupport;
import com.intellij.lang.refactoring.RefactoringSupportProvider;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.rename.PsiElementRenameHandler;
@@ -36,7 +35,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class VariableInplaceRenameHandler implements RenameHandler {
private static final ThreadLocal<Boolean> ourPreventInlineRenameFlag = new ThreadLocal<Boolean>();
private static final ThreadLocal<String> ourPreventInlineRenameFlag = new ThreadLocal<String>();
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler");
@Override
@@ -122,14 +121,18 @@ public class VariableInplaceRenameHandler implements RenameHandler {
boolean startedRename = renamer == null ? false : renamer.performInplaceRename();
if (!startedRename) {
performDialogRename(elementToRename, editor, dataContext);
performDialogRename(elementToRename, editor, dataContext, renamer != null ? renamer.myInitialName : null);
}
return renamer;
}
protected static void performDialogRename(PsiElement elementToRename, Editor editor, DataContext dataContext) {
performDialogRename(elementToRename, editor, dataContext, null);
}
protected static void performDialogRename(PsiElement elementToRename, Editor editor, DataContext dataContext, String initialName) {
try {
ourPreventInlineRenameFlag.set(Boolean.TRUE);
ourPreventInlineRenameFlag.set(initialName == null ? "" : initialName);
RenameHandler handler = RenameHandlerRegistry.getInstance().getRenameHandler(dataContext);
assert handler != null : elementToRename;
handler.invoke(
@@ -141,6 +144,12 @@ public class VariableInplaceRenameHandler implements RenameHandler {
ourPreventInlineRenameFlag.set(null);
}
}
@Nullable
public static String getInitialName() {
final String str = ourPreventInlineRenameFlag.get();
return StringUtil.isEmpty(str) ? null : str;
}
@Nullable
protected VariableInplaceRenamer createRenamer(@NotNull PsiElement elementToRename, Editor editor) {