From f8a4cf5704fb2cc3508983e38283b8f5d68d96f9 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Thu, 30 Jun 2016 17:21:35 +0200 Subject: [PATCH] 'ApplicationListener.afterWriteActionFinished' to get notifications when all writes actions finished and write lock is released CPP-7082 Cannot initiate symbols rebuild from writeAction in tests CPP-7020 "Access is allowed from event dispatch thread only" after reload Cmake Project (master) --- .../intellij/openapi/application/ApplicationAdapter.java | 3 +++ .../intellij/openapi/application/ApplicationListener.java | 7 ++++++- .../intellij/openapi/application/impl/ApplicationImpl.java | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) 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;