From 0c1799833556f37d441fbc86e69b3fcc30429e64 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 12 May 2016 16:20:42 +0200 Subject: [PATCH] [platform] incorrect fix reverted --- .../application/impl/ApplicationImpl.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) 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 ae9b716b8997..f9a7655bbeba 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 @@ -172,6 +172,10 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App myDoNotSave = isUnitTestMode || isHeadless; + if (myTestModeFlag) { + registerShutdownHook(); + } + if (!isUnitTestMode && !isHeadless) { Disposer.register(this, Disposer.newDisposable(), "ui"); @@ -218,6 +222,26 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App myLock = new ReadMostlyRWLock(edt); } + private void registerShutdownHook() { + ShutDownTracker.getInstance().registerShutdownTask(() -> { + if (isDisposed() || myDisposeInProgress) { + return; + } + ShutDownTracker.invokeAndWait(isUnitTestMode(), true, () -> { + if (ApplicationManager.getApplication() != this) return; + try { + myDisposeInProgress = true; + saveAll(); + } + finally { + if (!disposeSelf(true)) { + myDisposeInProgress = false; + } + } + }); + }); + } + private boolean disposeSelf(final boolean checkCanCloseProject) { final ProjectManagerImpl manager = (ProjectManagerImpl)ProjectManagerEx.getInstanceEx(); if (manager != null) {