mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inplace -> dialog rename: preserve typed text (IDEA-130452)
This commit is contained in:
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+14
-5
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user