From 226cf53fe349809fbcce76bee3f6dd72ac5ae036 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Sat, 30 Mar 2024 13:34:35 +0200 Subject: [PATCH] KeymapGenerator - use ModernApplicationStarter GitOrigin-RevId: fb612a6d317027149ea55af30be8695a0bae576a --- .../com/intellij/help/impl/KeymapGenerator.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) 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 962f7185a293..343d888d6afa 100644 --- a/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt +++ b/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.kt @@ -1,15 +1,19 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.help.impl +import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.Shortcut import com.intellij.openapi.actionSystem.ex.ActionManagerEx -import com.intellij.openapi.application.ApplicationStarter +import com.intellij.openapi.application.ModernApplicationStarter import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.ex.ApplicationInfoEx +import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.keymap.ex.KeymapManagerEx -import com.intellij.openapi.util.text.StringUtil +import com.intellij.openapi.util.text.Strings +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import java.io.IOException import java.nio.file.Files import java.nio.file.Path @@ -17,21 +21,21 @@ import kotlin.system.exitProcess private val LOG = logger() -private val LEVELS = sequenceOf(1, 4).map { i -> +private val LEVELS = (1..3).map { i -> " ".repeat(i * 2) }.toList() -private class KeymapGenerator : ApplicationStarter { +private class KeymapGenerator : ModernApplicationStarter() { @Suppress("OVERRIDE_DEPRECATION") override val commandName: String get() = "keymap" - override fun main(args: List) { + override suspend fun start(args: List) { val xml = StringBuilder() - xml.append("\n").append("\n") + xml.append("""""").append("\n\n") val keyManager = KeymapManagerEx.getInstanceEx() - val actionManager = ActionManagerEx.getInstanceEx() + val actionManager = serviceAsync() as ActionManagerEx val boundActions = actionManager.getBoundActions() for (keymap in keyManager.allKeymaps) { @@ -42,7 +46,7 @@ private class KeymapGenerator : ApplicationStarter { renderAction(id = id, asId = null, shortcuts = keymap.getShortcuts(id), dest = xml, actionManager = actionManager) } - //We need to inject bound actions under their real names in every keymap that doesn't already have them. + // we need to inject bound actions under their real names in every keymap that doesn't already have them for (id in boundActions) { val binding = actionManager.getActionBinding(id) if (binding != null && !alreadyMapped.contains(id)) { @@ -58,8 +62,10 @@ private class KeymapGenerator : ApplicationStarter { .resolve("keymap-%s.xml".format(ApplicationInfoEx.getInstanceEx().apiVersionAsNumber.productCode.lowercase())) try { - Files.createDirectories(targetFilePath.parent) - Files.writeString(targetFilePath, xml.toString()) + withContext(Dispatchers.IO) { + Files.createDirectories(targetFilePath.parent) + Files.writeString(targetFilePath, xml) + } LOG.info("Keymaps saved to: $targetFilePath") } catch (e: IOException) { @@ -97,7 +103,7 @@ private fun renderAction( if (action != null) { val text = action.templatePresentation.text if (text != null) { - dest.append(LEVELS[2]).append("").append(StringUtil.escapeXmlEntities(text)).append("\n") + dest.append(LEVELS[2]).append("").append(Strings.escapeXmlEntities(text)).append("\n") } } dest.append(LEVELS[1]).append("\n")