editor typing: narrow the scope of transactions (IDEA-CR-9167)

This commit is contained in:
peter
2016-03-11 16:23:14 +01:00
parent cebf53b5d1
commit 10cc5d56e7
2 changed files with 18 additions and 25 deletions
@@ -15,9 +15,11 @@
*/
package com.intellij.openapi.editor.actionSystem;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.application.TransactionKind;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.UndoConfirmationPolicy;
import com.intellij.openapi.editor.*;
@@ -136,11 +138,9 @@ public class TypedAction {
private class DefaultRawHandler implements TypedActionHandler {
@Override
public void execute(@NotNull final Editor editor, final char charTyped, @NotNull final DataContext dataContext) {
CommandProcessor.getInstance().executeCommand(
CommonDataKeys.PROJECT.getData(dataContext),
new Runnable() {
@Override
public void run() {
try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.TEXT_EDITING)) {
CommandProcessor.getInstance().executeCommand(
editor.getProject(), () -> {
if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), editor.getProject())) {
return;
}
@@ -160,9 +160,9 @@ public class TypedAction {
}
}
});
}
},
"", editor.getDocument(), UndoConfirmationPolicy.DEFAULT, editor.getDocument());
},
"", editor.getDocument(), UndoConfirmationPolicy.DEFAULT, editor.getDocument());
}
}
}
}
@@ -989,10 +989,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
if (event.isConsumed()) {
return;
}
try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.TEXT_EDITING)) {
if (processKeyTyped(event)) {
event.consume();
}
if (processKeyTyped(event)) {
event.consume();
}
}
@@ -1123,19 +1121,14 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
public ActionCallback type(@NotNull final String text) {
final ActionCallback result = new ActionCallback();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
for (int i = 0; i < text.length(); i++) {
if (!processKeyTyped(text.charAt(i))) {
result.setRejected();
return;
}
}
result.setDone();
for (int i = 0; i < text.length(); i++) {
if (!processKeyTyped(text.charAt(i))) {
result.setRejected();
break;
}
});
}
result.setDone();
return result;
}