From 1fddf514bbbe5f25ddef5ed629722fcfd5028c05 Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Wed, 27 Nov 2024 17:31:54 +0100 Subject: [PATCH] [remote dev] restart the frontend process only calling 'restart' (IJPL-165387) There is no need to ask about stopping the backend process when the frontend is restarting. So here a new method ApplicationListener.canRestartApplication is introduced, and it's overriden in the frontend process to suppress the confirmation before restarting. (cherry picked from commit d68298df0513978a046829ec87fa1134ceefa1ca) IJ-CR-150411 GitOrigin-RevId: eab235b69ca2252fe0170870a8f856f2a259407b --- platform/core-api/api-dump-unreviewed.txt | 1 + .../intellij/openapi/application/ApplicationListener.java | 8 ++++++++ .../openapi/application/impl/ApplicationImpl.java | 7 ++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/platform/core-api/api-dump-unreviewed.txt b/platform/core-api/api-dump-unreviewed.txt index 44f4a7e554ee..80bd23c0faf3 100644 --- a/platform/core-api/api-dump-unreviewed.txt +++ b/platform/core-api/api-dump-unreviewed.txt @@ -1170,6 +1170,7 @@ com.intellij.openapi.application.ApplicationListener - applicationExiting():V - beforeWriteActionStart(java.lang.Object):V - canExitApplication():Z +- canRestartApplication():Z - writeActionFinished(java.lang.Object):V - writeActionStarted(java.lang.Object):V c:com.intellij.openapi.application.ApplicationManager 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 636060424602..08abf61b1906 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationListener.java @@ -17,6 +17,14 @@ public interface ApplicationListener extends EventListener { return true; } + /** + * This method is called before restarting an application (e.g., after installing a plugin). + * Return {@code true} if the application can be restarted, or {@code false} to cancel restarting. + */ + default boolean canRestartApplication() { + return canExitApplication(); + } + /** * @deprecated Use {@link com.intellij.ide.AppLifecycleListener#appWillBeClosed(boolean)} */ 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 b0d6ba4ec29a..b054bf941323 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 @@ -587,7 +587,7 @@ public final class ApplicationImpl extends ClientAwareComponentManager implement AppLifecycleListener lifecycleListener = getMessageBus().syncPublisher(AppLifecycleListener.TOPIC); lifecycleListener.appClosing(); - if (!force && !canExit()) { + if (!force && !canExit(restart)) { return null; } @@ -810,9 +810,10 @@ public final class ApplicationImpl extends ClientAwareComponentManager implement return exitConfirmed; } - private boolean canExit() { + private boolean canExit(boolean restart) { for (ApplicationListener applicationListener : myDispatcher.getListeners()) { - if (!applicationListener.canExitApplication()) { + if (restart && !applicationListener.canRestartApplication() + || !restart && !applicationListener.canExitApplication()) { return false; } }