mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEADEV-39346 Finish inplace rename in XML with SPACE in addition to TAB & ENTER
This commit is contained in:
@@ -4,9 +4,10 @@ package com.intellij.codeInsight.template;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import com.intellij.util.PairProcessor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public abstract class TemplateManager {
|
||||
public static TemplateManager getInstance(Project project) {
|
||||
@@ -19,6 +20,9 @@ public abstract class TemplateManager {
|
||||
|
||||
public abstract void startTemplate(@NotNull Editor editor, @NotNull Template template, TemplateEditingListener listener);
|
||||
|
||||
public abstract void startTemplate(@NotNull Editor editor, @NotNull Template template, TemplateEditingListener listener,
|
||||
final PairProcessor<String, String> callback);
|
||||
|
||||
public abstract boolean startTemplate(@NotNull Editor editor, char shortcutChar);
|
||||
|
||||
public abstract TemplateContextType getContextType(@NotNull PsiFile file, int offset);
|
||||
|
||||
+17
-6
@@ -19,6 +19,7 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.util.PairProcessor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -107,7 +108,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
}
|
||||
|
||||
public boolean startTemplate(@NotNull Editor editor, char shortcutChar) {
|
||||
return startTemplate(this, editor, shortcutChar);
|
||||
return startTemplate(this, editor, shortcutChar, null);
|
||||
}
|
||||
|
||||
public void startTemplate(@NotNull final Editor editor, @NotNull Template template) {
|
||||
@@ -115,10 +116,16 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
}
|
||||
|
||||
public void startTemplate(@NotNull Editor editor, String selectionString, @NotNull Template template) {
|
||||
startTemplate(editor, selectionString, template, null);
|
||||
startTemplate(editor, selectionString, template, null, null);
|
||||
}
|
||||
|
||||
private void startTemplate(final Editor editor, final String selectionString, final Template template, TemplateEditingListener listener) {
|
||||
public void startTemplate(@NotNull Editor editor, @NotNull Template template, TemplateEditingListener listener,
|
||||
final PairProcessor<String, String> processor) {
|
||||
startTemplate(editor, null, template, listener, processor);
|
||||
}
|
||||
|
||||
private void startTemplate(final Editor editor, final String selectionString, final Template template, TemplateEditingListener listener,
|
||||
final PairProcessor<String, String> processor) {
|
||||
final TemplateState templateState = initTemplateState(editor);
|
||||
|
||||
templateState.getProperties().put(ExpressionContext.SELECTION, selectionString);
|
||||
@@ -138,7 +145,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
} else {
|
||||
editor.getSelectionModel().removeSelection();
|
||||
}
|
||||
templateState.start((TemplateImpl) template);
|
||||
templateState.start((TemplateImpl) template, processor);
|
||||
}
|
||||
},
|
||||
CodeInsightBundle.message("insert.code.template.command"), null
|
||||
@@ -154,10 +161,14 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
}
|
||||
|
||||
public void startTemplate(@NotNull final Editor editor, @NotNull final Template template, TemplateEditingListener listener) {
|
||||
startTemplate(editor, null, template, listener);
|
||||
startTemplate(editor, null, template, listener, null);
|
||||
}
|
||||
|
||||
public boolean startTemplate(TemplateManagerImpl templateManager, final Editor editor, char shortcutChar) {
|
||||
return startTemplate(templateManager, editor, shortcutChar, null);
|
||||
}
|
||||
|
||||
public boolean startTemplate(TemplateManagerImpl templateManager, final Editor editor, char shortcutChar, final PairProcessor<String, String> processor) {
|
||||
final Document document = editor.getDocument();
|
||||
PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, myProject);
|
||||
if (file == null) return false;
|
||||
@@ -221,7 +232,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
|
||||
editor.getCaretModel().moveToOffset(wordStart0);
|
||||
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
|
||||
editor.getSelectionModel().removeSelection();
|
||||
templateState0.start(template0);
|
||||
templateState0.start(template0, processor);
|
||||
}
|
||||
},
|
||||
CodeInsightBundle.message("insert.code.template.command"), null
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.PairProcessor;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.containers.IntArrayList;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -72,6 +73,7 @@ public class TemplateState implements Disposable {
|
||||
private boolean myTemplateIndented = false;
|
||||
private Document myDocument;
|
||||
private boolean myFinished;
|
||||
private PairProcessor<String, String> myProcessor;
|
||||
|
||||
public TemplateState(@NotNull Project project, final Editor editor) {
|
||||
myProject = project;
|
||||
@@ -119,6 +121,8 @@ public class TemplateState implements Disposable {
|
||||
myCommandListener = null;
|
||||
}
|
||||
|
||||
myProcessor = null;
|
||||
|
||||
//Avoid the leak of the editor
|
||||
releaseEditor();
|
||||
myDocument = null;
|
||||
@@ -210,9 +214,11 @@ public class TemplateState implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
public void start(TemplateImpl template) {
|
||||
public void start(TemplateImpl template, final PairProcessor<String, String> processor) {
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
|
||||
myProcessor = processor;
|
||||
|
||||
final DocumentReference[] refs = myDocument == null
|
||||
? null
|
||||
: new DocumentReference[] {DocumentReferenceManager.getInstance().create(myDocument) };
|
||||
@@ -499,6 +505,17 @@ public class TemplateState implements Disposable {
|
||||
}
|
||||
|
||||
private void calcResults(final boolean isQuick) {
|
||||
if (myProcessor != null && myCurrentVariableNumber >= 0) {
|
||||
final String variableName = myTemplate.getVariableNameAt(myCurrentVariableNumber);
|
||||
final TextResult value = getVariableValue(variableName);
|
||||
if (value != null && value.getText().length() > 0) {
|
||||
if (!myProcessor.process(variableName, value.getText())) {
|
||||
finishTemplateEditing(); // nextTab(); ?
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.psi.xml.XmlChildRole;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.util.PairProcessor;
|
||||
import com.intellij.util.containers.Stack;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -89,6 +90,10 @@ public class XmlTagInplaceRenamer {
|
||||
public void templateCancelled(final Template template) {
|
||||
finish();
|
||||
}
|
||||
}, new PairProcessor<String, String>() {
|
||||
public boolean process(final String variableName, final String value) {
|
||||
return value.length() == 0 || value.charAt(value.length() - 1) != ' ';
|
||||
}
|
||||
});
|
||||
|
||||
// restore old offset
|
||||
|
||||
Reference in New Issue
Block a user