diff --git a/platform/platform-api/src/com/intellij/openapi/application/WriteAction.java b/platform/platform-api/src/com/intellij/openapi/application/WriteAction.java index 4396c2b0c4f8..aad00046fb00 100644 --- a/platform/platform-api/src/com/intellij/openapi/application/WriteAction.java +++ b/platform/platform-api/src/com/intellij/openapi/application/WriteAction.java @@ -27,25 +27,25 @@ public abstract class WriteAction extends BaseActionRunnable { public RunResult execute() { final RunResult result = new RunResult(this); - if (canWriteNow()) { + final Application application = ApplicationManager.getApplication(); + if (application.isWriteAccessAllowed()) { result.run(); return result; } try { - if (!ApplicationManager.getApplication().isDispatchThread() && ApplicationManager.getApplication().isReadAccessAllowed()) { + if (!application.isDispatchThread() && application.isReadAccessAllowed()) { LOG.error("Must not start write action from within read action in the other thread - deadlock is coming"); } GuiUtils.runOrInvokeAndWait(new Runnable() { @Override public void run() { - final AccessToken accessToken = start(); - try { - result.run(); - } - finally { - accessToken.finish(); - } + application.runWriteAction(new Runnable() { + @Override + public void run() { + result.run(); + } + }); } }); }