From 0d5ff8fe89dd21f67e470e2ce73de66cccb8dffe Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 6 Apr 2016 13:21:25 +0200 Subject: [PATCH] fix LaterInvocator.leaveAllModals --- .../openapi/application/impl/LaterInvocator.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java index 5c86dae85fc4..63e41d6187d6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/LaterInvocator.java @@ -80,7 +80,7 @@ public class LaterInvocator { } private static final List ourModalEntities = ContainerUtil.createLockFreeCopyOnWriteList(); - private static Stack ourModalityStack = new Stack<>(ModalityState.NON_MODAL); + private static final Stack ourModalityStack = new Stack<>(ModalityState.NON_MODAL); private static final List ourQueue = new ArrayList(); //protected by LOCK private static volatile int ourQueueSkipCount; // optimization private static final FlushQueue ourFlushQueueRunnable = new FlushQueue(); @@ -210,9 +210,10 @@ public class LaterInvocator { ourModalityStateMulticaster.getMulticaster().beforeModalityStateChanged(false); boolean removed = ourModalEntities.remove(modalEntity); - ourModalityStack.pop(); + if (ourModalityStack.size() > 1) { + ourModalityStack.pop(); + } LOG.assertTrue(removed, modalEntity); - LOG.assertTrue(!ourModalityStack.isEmpty(), modalEntity); cleanupQueueForModal(modalEntity); ourQueueSkipCount = 0; requestFlush(); @@ -236,6 +237,10 @@ public class LaterInvocator { @TestOnly static void leaveAllModals() { ourModalEntities.clear(); + while (ourModalityStack.size() > 1) { + ourModalityStack.pop(); + } + LOG.assertTrue(getCurrentModalityState() == ModalityState.NON_MODAL, getCurrentModalityState()); ourQueueSkipCount = 0; requestFlush(); }