diff --git a/platform/platform-impl/src/com/intellij/ide/IdeDependentAction.kt b/platform/platform-impl/src/com/intellij/ide/IdeDependentAction.kt index d7bee3590969..5631d189f114 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeDependentAction.kt +++ b/platform/platform-impl/src/com/intellij/ide/IdeDependentAction.kt @@ -1,23 +1,36 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// 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.ide import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.Presentation import com.intellij.openapi.project.DumbAwareAction import com.intellij.ui.IdeUICustomization +import java.util.concurrent.atomic.AtomicBoolean abstract class IdeDependentAction : DumbAwareAction() { private val id by lazy { ActionManager.getInstance().getId(this)!! } + private val templatePresentationInitialized = AtomicBoolean() override fun update(e: AnActionEvent) { super.update(e) - IdeUICustomization.getInstance().getActionText(id)?.let { - e.presentation.text = it + + fun initializePresentation(p: Presentation) { + val customization = IdeUICustomization.getInstance() + customization.getActionText(id)?.let { + p.text = it + } + customization.getActionDescription(id)?.let { + p.description = it + } } - IdeUICustomization.getInstance().getActionDescription(id)?.let { - e.presentation.description = it + + if (!templatePresentationInitialized.getAndSet(true)) { // one-time init + initializePresentation(templatePresentation) } + + initializePresentation(e.presentation) } override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT diff --git a/platform/platform-impl/src/com/intellij/ide/IdeDependentActionGroup.kt b/platform/platform-impl/src/com/intellij/ide/IdeDependentActionGroup.kt index a6e4922313b8..9cbaf82f6b95 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeDependentActionGroup.kt +++ b/platform/platform-impl/src/com/intellij/ide/IdeDependentActionGroup.kt @@ -1,23 +1,32 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// 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.ide -import com.intellij.openapi.actionSystem.ActionManager -import com.intellij.openapi.actionSystem.ActionUpdateThread -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.DefaultActionGroup +import com.intellij.openapi.actionSystem.* import com.intellij.ui.IdeUICustomization +import java.util.concurrent.atomic.AtomicBoolean open class IdeDependentActionGroup : DefaultActionGroup() { private val id by lazy { ActionManager.getInstance().getId(this)!! } + private val templatePresentationInitialized = AtomicBoolean() override fun update(e: AnActionEvent) { super.update(e) - IdeUICustomization.getInstance().getActionText(id)?.let { - e.presentation.text = it + + fun initializePresentation(p: Presentation) { + val customization = IdeUICustomization.getInstance() + customization.getActionText(id)?.let { + p.text = it + } + customization.getActionDescription(id)?.let { + p.description = it + } } - IdeUICustomization.getInstance().getActionDescription(id)?.let { - e.presentation.description = it + + if (!templatePresentationInitialized.getAndSet(true)) { // one-time init + initializePresentation(templatePresentation) } + + initializePresentation(e.presentation) } override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT