From 10cc5d56e7f0a93a1f7f3b45f0fdc48210fd4dd4 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 11 Mar 2016 16:22:12 +0100 Subject: [PATCH] editor typing: narrow the scope of transactions (IDEA-CR-9167) --- .../editor/actionSystem/TypedAction.java | 18 ++++++------- .../openapi/editor/impl/EditorImpl.java | 25 +++++++------------ 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java index ee2445f75031..e80f9b6c8de1 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java @@ -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()); + } } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index a83f935e33f9..6b4cb2039c2c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -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; }