diff --git a/platform/core-api/src/com/intellij/openapi/application/AccessToken.java b/platform/core-api/src/com/intellij/openapi/application/AccessToken.java index ad25bd65962a..9e1e028c83ae 100644 --- a/platform/core-api/src/com/intellij/openapi/application/AccessToken.java +++ b/platform/core-api/src/com/intellij/openapi/application/AccessToken.java @@ -1,48 +1,16 @@ -package com.intellij.openapi.application; - -import com.intellij.openapi.util.text.StringUtil; - -public abstract class AccessToken { - protected void acquired() { - String id = id(); - - if (id != null) { - final Thread thread = Thread.currentThread(); - thread.setName(thread.getName() + id); - } - } - - protected void released() { - String id = id(); - - if (id != null) { - final Thread thread = Thread.currentThread(); - String name = thread.getName(); - name = StringUtil.replace(name, id, ""); - thread.setName(name); - } - } - - private String id() { - Class aClass = getClass(); - String name = aClass.getName(); - while (name == null) { - aClass = aClass.getSuperclass(); - name = aClass.getName(); - } - - name = name.substring(name.lastIndexOf('.') + 1); - name = name.substring(name.lastIndexOf('$') + 1); - if (!name.equals("AccessToken")) { - return " [" + name+"]"; - } - return null; - } - - public abstract void finish(); - - public static final AccessToken EMPTY_ACCESS_TOKEN = new AccessToken() { - @Override - public void finish() {} - }; -} +package com.intellij.openapi.application; + +public abstract class AccessToken { + protected void acquired() { + } + + protected void released() { + } + + public abstract void finish(); + + public static final AccessToken EMPTY_ACCESS_TOKEN = new AccessToken() { + @Override + public void finish() {} + }; +} diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index ab63636d4c94..f2a18b9d2f36 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -51,6 +51,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.ProgressIndicatorEx; @@ -99,7 +100,6 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application private final String myName; private final ReentrantWriterPreferenceReadWriteLock myActionsLock = new ReentrantWriterPreferenceReadWriteLock(); - //private final AppLock myActionsLock = new AppLockImpl(); private final Stack myWriteActionsStack = new Stack(); // accessed from EDT only, no need to sync @@ -914,21 +914,13 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application @Override public void runReadAction(@NotNull final Runnable action) { - if (isReadAccessAllowed()) { + final AccessToken token = acquireReadActionLock(); + + try { action.run(); } - else { - assertReadActionAllowed(); - try { - myActionsLock.readLock().acquire(); - action.run(); - } - catch (InterruptedException e) { - throw new RuntimeInterruptedException(e); - } - finally { - myActionsLock.readLock().release(); - } + finally { + token.finish(); } } @@ -951,21 +943,13 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application @Override public T runReadAction(@NotNull final Computable computation) { - if (isReadAccessAllowed()) { + final AccessToken token = acquireReadActionLock(); + + try { return computation.compute(); } - else { - assertReadActionAllowed(); - try { - myActionsLock.readLock().acquire(); - return computation.compute(); - } - catch (InterruptedException e) { - throw new RuntimeInterruptedException(e); - } - finally { - myActionsLock.readLock().release(); - } + finally { + token.finish(); } } @@ -1248,6 +1232,44 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application released(); } } + + @Override + protected void acquired() { + String id = id(); + + if (id != null) { + final Thread thread = Thread.currentThread(); + thread.setName(thread.getName() + id); + } + } + + @Override + protected void released() { + String id = id(); + + if (id != null) { + final Thread thread = Thread.currentThread(); + String name = thread.getName(); + name = StringUtil.replace(name, id, ""); + thread.setName(name); + } + } + + private String id() { + Class aClass = getClass(); + String name = aClass.getName(); + while (name == null) { + aClass = aClass.getSuperclass(); + name = aClass.getName(); + } + + name = name.substring(name.lastIndexOf('.') + 1); + name = name.substring(name.lastIndexOf('$') + 1); + if (!name.equals("AccessToken")) { + return " [" + name+"]"; + } + return null; + } } private class ReadAccessToken extends AccessToken {