diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationAdapter.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationAdapter.java index d3f0abafe44c..17fffb76466c 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationAdapter.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationAdapter.java @@ -38,4 +38,7 @@ public abstract class ApplicationAdapter implements ApplicationListener { @Override public void writeActionFinished(@NotNull Object action) { } + + public void afterWriteActionFinished(@NotNull Object action) { + } } \ No newline at end of file diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java index f9845687227f..7b6d71f8bf5c 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java @@ -45,7 +45,12 @@ public interface ApplicationListener extends EventListener { void writeActionStarted(@NotNull Object action); /** - * Is called on action finish. + * Is called on before action finish, while while lock is still being hold */ void writeActionFinished(@NotNull Object action); + + /** + * Is called after action finish and lock is released + */ + void afterWriteActionFinished(@NotNull Object action); } \ No newline at end of file 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 3bf62a7c81bd..1bdae0bc58e6 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 @@ -1122,6 +1122,7 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App } if (myWriteActionsStack.isEmpty()) { myLock.writeUnlock(); + fireAfterWriteActionFinished(clazz); } } } @@ -1263,6 +1264,10 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App myDispatcher.getMulticaster().writeActionFinished(action); } + private void fireAfterWriteActionFinished(@NotNull Class action) { + myDispatcher.getMulticaster().afterWriteActionFinished(action); + } + @Override public void saveSettings() { if (myDoNotSave) return;