From 4c9572f7b9f0071e55b48a7e2e86f6572e8f92e4 Mon Sep 17 00:00:00 2001 From: Ruslan Cheremin Date: Tue, 16 Jul 2024 12:45:29 +0200 Subject: [PATCH] [core] IDEA-337801: change exitProcess() -> app.exit() + exitProcess triggers ShutDownTracker directly, avoiding normal container shutdown, which causes de-initialization ordering problems GitOrigin-RevId: 50668ba053f66d30b241f134c30888ec19f37896 --- .../extractor/InspectopediaExtractor.kt | 12 +++++++----- .../com/intellij/ide/ui/search/TraverseUIStarter.kt | 7 ++++--- .../src/com/intellij/help/impl/KeymapGenerator.kt | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/platform/inspect/src/com/intellij/inspectopedia/extractor/InspectopediaExtractor.kt b/platform/inspect/src/com/intellij/inspectopedia/extractor/InspectopediaExtractor.kt index 9e730397cdd3..87b1b3a5ffd6 100644 --- a/platform/inspect/src/com/intellij/inspectopedia/extractor/InspectopediaExtractor.kt +++ b/platform/inspect/src/com/intellij/inspectopedia/extractor/InspectopediaExtractor.kt @@ -14,7 +14,9 @@ import com.intellij.inspectopedia.extractor.data.Inspection import com.intellij.inspectopedia.extractor.data.OptionsPanelInfo import com.intellij.inspectopedia.extractor.utils.HtmlUtils import com.intellij.openapi.application.ApplicationInfo +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ModernApplicationStarter +import com.intellij.openapi.application.ex.ApplicationManagerEx import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.project.ProjectManager @@ -50,12 +52,12 @@ private class InspectopediaExtractor : ModernApplicationStarter() { } catch (e: IOException) { LOG.error("Output directory does not exist and could not be created") - exitProcess(-1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1 ) } if (!Files.isDirectory(outputPath) || !Files.isWritable(outputPath)) { LOG.error("Output path is invalid") - exitProcess(-1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1 ) } try { @@ -113,7 +115,7 @@ private class InspectopediaExtractor : ModernApplicationStarter() { catch (e: Throwable) { System.err.println("Error while processing ${wrapper.extension}") e.printStackTrace() - exitProcess(-1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1 ) } } @@ -139,9 +141,9 @@ private class InspectopediaExtractor : ModernApplicationStarter() { } catch (e: Exception) { e.printStackTrace() - exitProcess(-1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1 ) } - exitProcess(0) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true ) } } diff --git a/platform/lang-impl/src/com/intellij/ide/ui/search/TraverseUIStarter.kt b/platform/lang-impl/src/com/intellij/ide/ui/search/TraverseUIStarter.kt index ee0285ac1009..2d5ce715dd26 100644 --- a/platform/lang-impl/src/com/intellij/ide/ui/search/TraverseUIStarter.kt +++ b/platform/lang-impl/src/com/intellij/ide/ui/search/TraverseUIStarter.kt @@ -21,8 +21,10 @@ import com.intellij.openapi.actionSystem.ActionGroup import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.impl.ActionManagerImpl +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.EDT import com.intellij.openapi.application.ModernApplicationStarter +import com.intellij.openapi.application.ex.ApplicationManagerEx import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.extensions.PluginId @@ -44,7 +46,6 @@ import java.nio.charset.CodingErrorAction import java.nio.file.Files import java.nio.file.Path import java.util.* -import kotlin.system.exitProcess /** * Used in installer's "build searchable options" step. @@ -61,7 +62,7 @@ private class TraverseUIStarter : ModernApplicationStarter() { options = LinkedHashMap(), outputPath = Path.of(args[1]).toAbsolutePath().normalize(), ) - exitProcess(0) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true ) } catch (e: Throwable) { try { @@ -70,7 +71,7 @@ private class TraverseUIStarter : ModernApplicationStarter() { } catch (ignored: Throwable) { } - exitProcess(-1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1 ) } } } diff --git a/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt b/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt index a6db95546c61..f1e315fb250a 100644 --- a/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt +++ b/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.actionSystem.ex.ActionManagerEx import com.intellij.openapi.application.ModernApplicationStarter import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.ex.ApplicationInfoEx +import com.intellij.openapi.application.ex.ApplicationManagerEx import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.keymap.KeymapUtil @@ -17,7 +18,6 @@ import kotlinx.coroutines.withContext import java.io.IOException import java.nio.file.Files import java.nio.file.Path -import kotlin.system.exitProcess private val LOG = logger() @@ -66,9 +66,9 @@ private class KeymapGenerator : ModernApplicationStarter() { } catch (e: IOException) { LOG.error("Cannot save keymaps", e) - exitProcess(1) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true, -1) } - exitProcess(0) + ApplicationManagerEx.getApplicationEx().exit( /*force: */ false, /*confirm: */ true) } }