From b800c631633f49fa0cfe5b605e7e5c7125ffd65b Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Tue, 10 Jun 2025 20:25:46 +0200 Subject: [PATCH] [command-completion] IDEA-359174 delete icons and use grey bulb GitOrigin-RevId: 3cd804645a186a66273ed8a0365c33ac01718ae4 --- ...rateGetterSetterHandleCompletionCommand.kt | 3 -- .../JavaCreateFromUsagesCompletionCommand.kt | 3 -- .../impl/JavaDeleteCompletionCommand.kt | 3 -- .../impl/JavaIntroduceVariableCommand.kt | 5 --- .../analysis-api/api-dump-experimental.txt | 2 +- .../completion/command/CompletionCommand.kt | 2 +- platform/lang-impl/api-dump-experimental.txt | 2 -- .../command/CommandCompletionProvider.kt | 3 +- .../command/CommandCompletionService.kt | 33 +------------------ .../AbstractFormatCodeCompletionCommand.kt | 4 --- .../AbstractGenerateCommandProvider.kt | 3 -- ...KotlinCreateFromUsagesCompletionCommand.kt | 3 -- .../commands/KotlinDeleteCompletionCommand.kt | 3 -- .../fir/completion/K2CommandCompletionTest.kt | 2 +- 14 files changed, 6 insertions(+), 65 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaBaseGenerateGetterSetterHandleCompletionCommand.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaBaseGenerateGetterSetterHandleCompletionCommand.kt index fa19dffafb38..462d0ac11674 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaBaseGenerateGetterSetterHandleCompletionCommand.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaBaseGenerateGetterSetterHandleCompletionCommand.kt @@ -14,7 +14,6 @@ import com.intellij.psi.PsiField import com.intellij.psi.PsiFile import com.intellij.psi.PsiIdentifier import com.intellij.psi.util.PsiTreeUtil -import javax.swing.Icon internal class GenerateGetterSetterHandleCompletionCommandProvider : CommandProvider { override fun getCommands(context: CommandCompletionProviderContext): List { @@ -57,8 +56,6 @@ private class BaseGenerateGetterSetterHandleCompletionCommand( private val preview: () -> IntentionPreviewInfo?, ) : CompletionCommand(), CompletionCommandWithPreview { - override val icon: Icon? = null - override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { val element = getCommandContext(offset, psiFile) ?: return val field = PsiTreeUtil.getParentOfType(element, PsiField::class.java) ?: return diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaCreateFromUsagesCompletionCommand.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaCreateFromUsagesCompletionCommand.kt index a16d0094107b..80183d6d419d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaCreateFromUsagesCompletionCommand.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaCreateFromUsagesCompletionCommand.kt @@ -22,7 +22,6 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiUtil import com.intellij.psi.util.parentOfType import org.jetbrains.annotations.Nls -import javax.swing.Icon internal class JavaCreateFromUsagesCommandProvider : CommandProvider { @@ -54,8 +53,6 @@ internal class JavaCreateFromUsagesCompletionCommand(val psiClass: PsiClass) : C get() = listOf("Create method from usage") override val presentableName: @Nls String get() = QuickFixBundle.message("create.method.from.usage.family") - override val icon: Icon? - get() = null override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { val fileDocument = psiFile.fileDocument diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaDeleteCompletionCommand.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaDeleteCompletionCommand.kt index cd45542a2baa..a197ad3d2818 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaDeleteCompletionCommand.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaDeleteCompletionCommand.kt @@ -13,7 +13,6 @@ import com.intellij.openapi.project.DumbAware import com.intellij.psi.* import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.annotations.Nls -import javax.swing.Icon internal class JavaDeleteCompletionCommandProvider : CommandProvider { override fun getCommands(context: CommandCompletionProviderContext): List { @@ -66,8 +65,6 @@ private class JavaDeleteCompletionCommand( get() = listOf("delete", "remove") override val presentableName: @Nls String get() = JavaBundle.message("command.completion.delete.element.text") - override val icon: Icon? - get() = null override val priority: Int get() = -100 diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaIntroduceVariableCommand.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaIntroduceVariableCommand.kt index 5c9a7e788a15..d5822bd603a6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaIntroduceVariableCommand.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaIntroduceVariableCommand.kt @@ -3,7 +3,6 @@ package com.intellij.codeInsight.completion.commands.impl import com.intellij.codeInsight.completion.command.* import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo -import com.intellij.icons.AllIcons import com.intellij.ide.DataManager import com.intellij.idea.ActionsBundle import com.intellij.lang.ContextAwareActionHandler @@ -19,7 +18,6 @@ import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.actions.IntroduceVariableAction import org.jetbrains.annotations.Nls import java.util.Locale.getDefault -import javax.swing.Icon //disabled because there is a conflict internal class JavaIntroduceVariableCommandProvider : CommandProvider { @@ -49,9 +47,6 @@ internal class JavaIntroduceVariableCommand : CompletionCommand(), CompletionCom override val presentableName: @Nls String get() = RefactoringBundle.message("introduce.variable.title").lowercase().replaceFirstChar { if (it.isLowerCase()) it.titlecase(getDefault()) else it.toString() } - override val icon: Icon - get() = AllIcons.Nodes.Variable - override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { val action = IntroduceVariableAction() if (editor == null) return diff --git a/platform/analysis-api/api-dump-experimental.txt b/platform/analysis-api/api-dump-experimental.txt index e85a2f1a5d1d..8205e8e41f6b 100644 --- a/platform/analysis-api/api-dump-experimental.txt +++ b/platform/analysis-api/api-dump-experimental.txt @@ -40,7 +40,7 @@ - a:execute(I,com.intellij.psi.PsiFile,com.intellij.openapi.editor.Editor):V - getAdditionalInfo():java.lang.String - getHighlightInfo():com.intellij.codeInsight.completion.command.HighlightInfoLookup -- a:getIcon():javax.swing.Icon +- getIcon():javax.swing.Icon - a:getPresentableName():java.lang.String - getPriority():java.lang.Integer - getSynonyms():java.util.List diff --git a/platform/analysis-api/src/com/intellij/codeInsight/completion/command/CompletionCommand.kt b/platform/analysis-api/src/com/intellij/codeInsight/completion/command/CompletionCommand.kt index 2d82675ef773..0397060d08cb 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/completion/command/CompletionCommand.kt +++ b/platform/analysis-api/src/com/intellij/codeInsight/completion/command/CompletionCommand.kt @@ -27,7 +27,7 @@ abstract class CompletionCommand : UserDataHolderBase() { * Represents a localized, human-readable name for the command, used as a main lookup string */ abstract val presentableName: @Nls String - abstract val icon: Icon? + open val icon: Icon? = null /** * Defines the priority of the command in the code completion system. diff --git a/platform/lang-impl/api-dump-experimental.txt b/platform/lang-impl/api-dump-experimental.txt index d2c44308228f..d6676df63bd9 100644 --- a/platform/lang-impl/api-dump-experimental.txt +++ b/platform/lang-impl/api-dump-experimental.txt @@ -189,7 +189,6 @@ c:com.intellij.codeInsight.actions.VcsFacade - ():V - f:execute(I,com.intellij.psi.PsiFile,com.intellij.openapi.editor.Editor):V - a:findTargetToRefactor(com.intellij.psi.PsiElement):com.intellij.psi.PsiElement -- f:getIcon():javax.swing.Icon - f:getPresentableName():java.lang.String - getPreview():com.intellij.codeInsight.intention.preview.IntentionPreviewInfo - f:getSynonyms():java.util.List @@ -213,7 +212,6 @@ c:com.intellij.codeInsight.actions.VcsFacade - f:getAction():com.intellij.codeInsight.actions.CodeInsightAction - f:getCustomI18nName():java.lang.String - f:getCustomName():java.lang.String -- getIcon():javax.swing.Icon - getPresentableName():java.lang.String - f:setCustomI18nName(java.lang.String):V - f:setCustomName(java.lang.String):V diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionProvider.kt index b8bca3c0a19c..9649b89ef1b8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionProvider.kt @@ -8,6 +8,7 @@ import com.intellij.codeInsight.completion.ml.MLWeigherUtil import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.codeInsight.lookup.LookupElementWeigher +import com.intellij.icons.AllIcons.Actions.IntentionBulbGrey import com.intellij.icons.AllIcons.Actions.Lightning import com.intellij.injected.editor.DocumentWindow import com.intellij.injected.editor.EditorWindow @@ -180,7 +181,7 @@ internal class CommandCompletionProvider : CompletionProvider("co private val PROMPT_HIGHLIGHTING = Key.create("completion.command.prompt.highlighting") private val LOOKUP_HIGHLIGHTING = Key.create>("completion.command.lookup.highlighting") -private val ICON_RENDER = Key.create>("completion.command.icon.render") private const val PROMPT_LAYER = HighlighterLayer.ERROR + 10 @ApiStatus.Internal @@ -250,8 +247,6 @@ private class CommandCompletionHighlightingListener( private fun clear(editor: Editor?) { clearPromptHighlighting(editor) - val renderer = lookup.removeUserData(ICON_RENDER) - renderer?.let { Disposer.dispose(it) } val project = editor?.project ?: return val highlightManager = HighlightManager.getInstance(project) @@ -288,30 +283,6 @@ private class CommandCompletionHighlightingListener( super.lookupCanceled(event) } - private fun updateIcon(lookup: LookupImpl, element: CommandCompletionLookupElement) { - if (lookup.getUserData(INSTALLED_ADDITIONAL_MATCHER_KEY) != true) { - return - } - val renderer = lookup.getUserData(ICON_RENDER) - renderer?.let { Disposer.dispose(it) } - if (element.icon != null) { - val factory = PresentationFactory(editor) - val iconPresentation = factory.icon(element.icon) - val presentationRenderer = PresentationRenderer(iconPresentation) - val lookupEditor = InjectedLanguageEditorUtil.getTopLevelEditor(lookup.editor) - val inlay: Inlay? = - if (nonWrittenFiles) { - lookupEditor.inlayModel.addInlineElement(0, false, presentationRenderer) - } - else { - lookupEditor.inlayModel.addInlineElement(element.hostStartOffset, true, presentationRenderer) - } - if (inlay != null) { - lookup.putUserData(ICON_RENDER, inlay) - } - } - } - private fun updatePromptHighlighting(lookup: LookupImpl, item: CommandCompletionLookupElement) { val installed = ConcurrencyUtil.computeIfAbsent(lookup, INSTALLED_PROMPT_KEY) { AtomicBoolean(false) } val startOffset = lookup.lookupOriginalStart - findActualIndex(item.suffix, editor.document.immutableCharSequence, @@ -340,9 +311,7 @@ private class CommandCompletionHighlightingListener( if (lookup !is LookupImpl) return completionService?.setHint(lookup, editor, nonWrittenFiles) val item = event.item - if (updateItem(item)) return - val element = item?.`as`(CommandCompletionLookupElement::class.java) ?: return - updateIcon(lookup, element) + updateItem(item) } private fun updateHighlighting(lookup: LookupImpl, element: CommandCompletionLookupElement) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractFormatCodeCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractFormatCodeCompletionCommand.kt index 065f25a6debc..e797d59646d4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractFormatCodeCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractFormatCodeCompletionCommand.kt @@ -4,7 +4,6 @@ package com.intellij.codeInsight.completion.command.commands import com.intellij.codeInsight.actions.ReformatCodeProcessor import com.intellij.codeInsight.completion.command.* import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo -import com.intellij.icons.AllIcons import com.intellij.idea.ActionsBundle import com.intellij.lang.injection.InjectedLanguageManager import com.intellij.openapi.editor.Editor @@ -12,7 +11,6 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import org.jetbrains.annotations.Nls import java.util.Locale.getDefault -import javax.swing.Icon /** * An abstract command designed to provide a context-specific code formatting completion action. @@ -41,8 +39,6 @@ abstract class AbstractFormatCodeCompletionCommand : CompletionCommand(), Comple .replaceFirst("_", "") .lowercase() .replaceFirstChar { if (it.isLowerCase()) it.titlecase(getDefault()) else it.toString() } - final override val icon: Icon - get() = AllIcons.Actions.ReformatCode // Use the reformat icon override fun getPreview(): IntentionPreviewInfo? { return IntentionPreviewInfo.Html(ActionsBundle.message("action.ReformatCode.description")) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGenerateCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGenerateCommandProvider.kt index fc871962659c..dfafe418c737 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGenerateCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGenerateCommandProvider.kt @@ -17,7 +17,6 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.util.containers.JBIterable import org.jetbrains.annotations.Nls -import javax.swing.Icon /** * Abstract base class that provides a framework for generating completion commands @@ -82,8 +81,6 @@ abstract class AbstractGenerateCommandProvider : CommandProvider, DumbAware { ) : CompletionCommand() { override val presentableName: @Nls String get() = customI18nName ?: (CodeInsightBundle.message("command.completion.generate.text", action.templateText)) - override val icon: Icon? - get() = null override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { if (editor == null) return diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinCreateFromUsagesCompletionCommand.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinCreateFromUsagesCompletionCommand.kt index dc908813f1ce..5d0fbc7a0e3a 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinCreateFromUsagesCompletionCommand.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinCreateFromUsagesCompletionCommand.kt @@ -40,7 +40,6 @@ import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector import org.jetbrains.kotlin.psi.stubs.elements.KtNameReferenceExpressionElementType -import javax.swing.Icon internal class KotlinCreateFromUsagesCommandProvider : CommandProvider { @@ -86,8 +85,6 @@ internal class KotlinCreateFromUsagesCompletionCommand(val ktClass: KtClass) : C get() = listOf("Create method from usage") override val presentableName: @Nls String get() = QuickFixBundle.message("create.method.from.usage.family") - override val icon: Icon? - get() = null override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { val fileDocument = psiFile.fileDocument diff --git a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinDeleteCompletionCommand.kt b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinDeleteCompletionCommand.kt index 0ee70030673c..d0b55d649639 100644 --- a/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinDeleteCompletionCommand.kt +++ b/plugins/kotlin/completion/impl-k2/src/org/jetbrains/kotlin/idea/completion/impl/k2/contributors/commands/KotlinDeleteCompletionCommand.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedDeclaration -import javax.swing.Icon internal class KotlinDeleteCompletionCommandProvider : CommandProvider { override fun getCommands(context: CommandCompletionProviderContext): List { @@ -72,8 +71,6 @@ private class KotlinDeleteCompletionCommand( get() = listOf("Delete element") override val presentableName: @Nls String get() = ActionsBundle.message("action.EditorDelete.text") - override val icon: Icon? - get() = null override val priority: Int get() = -100 diff --git a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/completion/K2CommandCompletionTest.kt b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/completion/K2CommandCompletionTest.kt index 012aba6adeb0..7b2e3458293e 100644 --- a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/completion/K2CommandCompletionTest.kt +++ b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/completion/K2CommandCompletionTest.kt @@ -137,7 +137,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment with line", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment line", ignoreCase = true) }) myFixture.checkResult( """ fun main() {