From a36ca2612b1ef62d55fe544df236fb96a6403f38 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Fri, 6 Jun 2025 15:14:30 +0200 Subject: [PATCH] [command-completion] IDEA-359174 i18name as main lookup GitOrigin-RevId: 945443d9f0c0aff95fb551859287f7236191d1c4 --- ...rateGetterSetterHandleCompletionCommand.kt | 19 +++++------- .../JavaCreateFromUsagesCompletionCommand.kt | 10 +++---- .../impl/JavaDeleteCompletionCommand.kt | 8 ++--- .../JavaInlineVariableCompletionCommand.kt | 8 ++--- .../impl/JavaIntroduceVariableCommand.kt | 10 ++++--- .../commands/JavaCommandsCompletionTest.kt | 16 +++++----- .../resources/messages/JavaBundle.properties | 4 +++ .../analysis-api/api-dump-experimental.txt | 4 +-- .../completion/command/CompletionCommand.kt | 11 +++---- .../messages/CodeInsightBundle.properties | 5 ++-- platform/lang-impl/api-dump-experimental.txt | 17 +++++------ .../CommandCompletionDocumentationProvider.kt | 2 +- .../command/CommandCompletionProvider.kt | 9 +++--- .../command/CommandInsertHandler.kt | 2 +- .../AbstractActionCompletionCommand.kt | 29 ++++++++++++------- ...bstractChangeSignatureCompletionCommand.kt | 8 ++--- .../AbstractCopyFQNCompletionCommand.kt | 8 ++--- ...ConstantFieldParameterCompletionCommand.kt | 12 ++++---- .../AbstractFormatCodeCompletionCommand.kt | 11 ++++--- .../AbstractGenerateCommandProvider.kt | 4 +-- ...bstractGoToDeclarationCompletionCommand.kt | 5 ++-- ...ractGoToImplementationCompletionCommand.kt | 4 +-- .../AbstractGoToSuperCompletionCommand.kt | 4 +-- ...ctInlineMethodCompletionCommandProvider.kt | 8 ++--- .../AbstractMoveCopyClassCompletionCommand.kt | 16 +++++----- .../AbstractRenameActionCommandProvider.kt | 8 ++--- ...stractShowUsagesActionCompletionCommand.kt | 4 +-- .../DirectErrorFixCompletionCommand.kt | 10 +++---- .../DirectInspectionFixCompletionCommand.kt | 10 +++---- .../DirectIntentionCommandProvider.kt | 4 +-- .../commands/IntentionCompletionCommand.kt | 6 ++-- .../commands/LineCommentCompletionCommand.kt | 10 +++---- .../OptimizeImportCompletionCommand.kt | 4 +-- .../PsiElementCommentCompletionCommand.kt | 16 +++++----- .../commands/RenameActionCommandProvider.kt | 8 ++--- .../SimpleRunMarkerCommandProvider.kt | 27 +++++------------ ...KotlinCreateFromUsagesCompletionCommand.kt | 6 ++-- .../commands/KotlinDeleteCompletionCommand.kt | 4 +-- .../fir/completion/K2CommandCompletionTest.kt | 14 ++++----- 39 files changed, 184 insertions(+), 181 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 b15ab74a4284..3991699292aa 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 @@ -1,17 +1,12 @@ // 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.codeInsight.completion.commands.impl -import com.intellij.codeInsight.completion.command.CommandCompletionProviderContext -import com.intellij.codeInsight.completion.command.CommandProvider -import com.intellij.codeInsight.completion.command.CompletionCommand -import com.intellij.codeInsight.completion.command.CompletionCommandWithPreview -import com.intellij.codeInsight.completion.command.HighlightInfoLookup -import com.intellij.codeInsight.completion.command.getCommandContext -import com.intellij.codeInsight.daemon.QuickFixBundle +import com.intellij.codeInsight.completion.command.* import com.intellij.codeInsight.intention.QuickFixFactory import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler import com.intellij.codeInsight.intention.impl.preview.IntentionPreviewComputable import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo +import com.intellij.java.JavaBundle import com.intellij.modcommand.ActionContext import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.colors.EditorColors @@ -29,9 +24,9 @@ internal class GenerateGetterSetterHandleCompletionCommandProvider : CommandProv val result = mutableListOf() val possibleCases = listOf( - GetterSetterCase(true, true, "Generate 'Getter/Setter'", QuickFixBundle.message("create.getter.setter")), - GetterSetterCase(false, true, "Generate 'Setter'", QuickFixBundle.message("create.setter")), - GetterSetterCase(true, false, "Generate 'Getter'", QuickFixBundle.message("create.getter")), + GetterSetterCase(true, true, "Create 'Getter/Setter'", JavaBundle.message("command.completion.generate.getter.setter")), + GetterSetterCase(false, true, "Create 'Setter'", JavaBundle.message("command.completion.generate.setter")), + GetterSetterCase(true, false, "Create 'Getter'", JavaBundle.message("command.completion.generate.getter")), ) for (case in possibleCases) { val action = QuickFixFactory.getInstance() @@ -56,8 +51,8 @@ private data class GetterSetterCase(val generateGetter: Boolean, val generateSet private class BaseGenerateGetterSetterHandleCompletionCommand( val generateGetter: Boolean, val generateSetter: Boolean, - override val name: String, - override val i18nName: String, + override val commandId: String, + override val presentableName: String, override val highlightInfo: HighlightInfoLookup?, private val preview: () -> IntentionPreviewInfo?, ) : CompletionCommand(), CompletionCommandWithPreview { 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 35ad5f47cb4b..19bf8a22cc0f 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 @@ -50,9 +50,9 @@ internal class JavaCreateFromUsagesCompletionCommand(val psiClass: PsiClass) : C private val methodNames: Set = psiClass.allMethods.map { it.name }.toSet() - override val name: String + override val commandId: String get() = "Create method from usage" - override val i18nName: @Nls String + override val presentableName: @Nls String get() = QuickFixBundle.message("create.method.from.usage.family") override val icon: Icon? get() = null @@ -84,14 +84,14 @@ internal class JavaCreateFromUsagesCompletionCommand(val psiClass: PsiClass) : C generateActions(expression).firstOrNull { it is CreateMethodAction } } }?: return - ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, action, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, action, commandId) } - override fun customPrefixMatcher(prefix: String): PrefixMatcher? { + override fun customPrefixMatcher(prefix: String): PrefixMatcher { return AlwaysMatchingCamelHumpMatcher(prefix, psiClass.project, methodNames) } - override val priority: Int? + override val priority: Int get() = 500 } 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 653b6aa43ed8..251dc8954588 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 @@ -62,13 +62,13 @@ private class JavaDeleteCompletionCommand( override val highlightInfo: HighlightInfoLookup?, private val preview: IntentionPreviewInfo, ) : CompletionCommand(), CompletionCommandWithPreview, DumbAware { - override val name: String + override val commandId: String get() = "Delete element" - override val i18nName: @Nls String + override val presentableName: @Nls String get() = JavaBundle.message("command.completion.delete.element.text") override val icon: Icon? get() = null - override val priority: Int? + override val priority: Int get() = -100 override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { @@ -85,7 +85,7 @@ private class JavaDeleteCompletionCommand( }, psiFile) } - override fun getPreview(): IntentionPreviewInfo? { + override fun getPreview(): IntentionPreviewInfo { return preview } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaInlineVariableCompletionCommand.kt b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaInlineVariableCompletionCommand.kt index ef2155539101..daf61c2b6e63 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaInlineVariableCompletionCommand.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/commands/impl/JavaInlineVariableCompletionCommand.kt @@ -50,14 +50,14 @@ internal class JavaInlineVariableCompletionCommandProvider : CommandProvider { private class JavaInlineVariableCompletionCommand( override val highlightInfo: HighlightInfoLookup?, ) : CompletionCommand(), DumbAware, CompletionCommandWithPreview { - override val name: String + override val commandId: String get() = "Inline" - override val i18nName: @Nls String + override val presentableName: @Nls String get() = JavaBundle.message("command.completion.inline.text") - override val icon: Icon? + override val icon: Icon get() = AllIcons.Actions.RefactoringBulb // Use an appropriate icon from IntelliJ's icon set override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { @@ -77,7 +77,7 @@ private class JavaInlineVariableCompletionCommand( } } - override fun getPreview(): IntentionPreviewInfo? { + override fun getPreview(): IntentionPreviewInfo { return IntentionPreviewInfo.Html(ActionsBundle.message("action.Inline.description")) } } \ No newline at end of file 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 bf4171e269e4..f7efc27dd5e9 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 @@ -18,6 +18,7 @@ import com.intellij.refactoring.JavaRefactoringActionHandlerFactory 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 @@ -41,11 +42,12 @@ internal class JavaIntroduceVariableCommandProvider : CommandProvider { } internal class JavaIntroduceVariableCommand : CompletionCommand(), CompletionCommandWithPreview { - override val name: String + override val commandId: String get() = "Introduce variable" - override val i18nName: @Nls String - get() = RefactoringBundle.message("introduce.variable.title") + @Suppress("HardCodedStringLiteral") + 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 @@ -61,7 +63,7 @@ internal class JavaIntroduceVariableCommand : CompletionCommand(), CompletionCom ActionUtil.performAction(action, event) } - override fun getPreview(): IntentionPreviewInfo? { + override fun getPreview(): IntentionPreviewInfo { return IntentionPreviewInfo.Html(ActionsBundle.message("action.IntroduceVariable.description")) } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/commands/JavaCommandsCompletionTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/commands/JavaCommandsCompletionTest.kt index c485e4a8c66d..a54772ed6813 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/commands/JavaCommandsCompletionTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/commands/JavaCommandsCompletionTest.kt @@ -80,7 +80,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { . """.trimIndent()) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.equals("format", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Reformat", ignoreCase = true) }) myFixture.checkResult(""" class A { void foo() { @@ -177,7 +177,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } """.trimIndent()) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Generate 'Ge", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Getter", ignoreCase = true) }) myFixture.checkResult(""" class A { String y; @@ -242,7 +242,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } }.""".trimIndent()) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment by line comment", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with line comment", ignoreCase = true) }) myFixture.checkResult(""" //class A { // public String getY() { @@ -260,7 +260,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } }""".trimIndent()) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment line", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with line", ignoreCase = true) }) myFixture.checkResult(""" class A { public String getY() { @@ -279,7 +279,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } }.""".trimIndent()) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment by block", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with block", ignoreCase = true) }) myFixture.checkResult(""" /* class A { @@ -565,7 +565,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { myFixture.doHighlighting() myFixture.type(".") val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("comment line", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("comment with line", ignoreCase = true) }) myFixture.checkResult(""" class A { void foo() { @@ -799,7 +799,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } """.trimIndent()) val elements = myFixture.completeBasic() - assertTrue(elements.any { element -> element.lookupString.equals("Move element", ignoreCase = true) }) + assertTrue(elements.any { element -> element.lookupString.equals("Move", ignoreCase = true) }) } fun testCopyClass() { @@ -815,7 +815,7 @@ class JavaCommandsCompletionTest : LightFixtureCompletionTestCase() { } """.trimIndent()) val elements = myFixture.completeBasic() - assertTrue(elements.any { element -> element.lookupString.equals("Copy class", ignoreCase = true) }) + assertTrue(elements.any { element -> element.lookupString.equals("Copy", ignoreCase = true) }) } fun testInlineReferenceOnlyVariables() { diff --git a/java/openapi/resources/messages/JavaBundle.properties b/java/openapi/resources/messages/JavaBundle.properties index 78714687f374..daead1566458 100644 --- a/java/openapi/resources/messages/JavaBundle.properties +++ b/java/openapi/resources/messages/JavaBundle.properties @@ -1891,6 +1891,10 @@ command.completion.getters.text=Getters command.completion.setters.text=Setters command.completion.getters.and.setters.text=Getters and Setters +command.completion.generate.getter.setter=Generate 'Getter' and 'Setter' +command.completion.generate.getter=Generate 'Getter' +command.completion.generate.setter=Generate 'Setter' + advanced.setting.java.show.irrelevant.templates.in.source.roots=Show irrelevant New File templates in Java source roots java.test.use.wall.time=Use Wall Time java.test.overall.time=Overall time: {0} diff --git a/platform/analysis-api/api-dump-experimental.txt b/platform/analysis-api/api-dump-experimental.txt index 26cb36b8d3de..d1bd0980ff71 100644 --- a/platform/analysis-api/api-dump-experimental.txt +++ b/platform/analysis-api/api-dump-experimental.txt @@ -39,10 +39,10 @@ - customPrefixMatcher(java.lang.String):com.intellij.codeInsight.completion.PrefixMatcher - a:execute(I,com.intellij.psi.PsiFile,com.intellij.openapi.editor.Editor):V - getAdditionalInfo():java.lang.String +- a:getCommandId():java.lang.String - getHighlightInfo():com.intellij.codeInsight.completion.command.HighlightInfoLookup -- a:getI18nName():java.lang.String - a:getIcon():javax.swing.Icon -- a:getName():java.lang.String +- a:getPresentableName():java.lang.String - getPriority():java.lang.Integer - getSynonyms():java.util.List *f:com.intellij.codeInsight.completion.command.CompletionCommandKt 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 6de0ef97dd5c..481d6879ce42 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 @@ -23,14 +23,15 @@ import javax.swing.Icon */ abstract class CompletionCommand : UserDataHolderBase() { /** - * Represents the name which is used as a main lookup string + * ID to identify this command. It is also used as a lookup string. + * It should present this action in English */ - abstract val name: String + abstract val commandId: String /** - * Represents a localized, human-readable name for the command, used in tail lookup string + * Represents a localized, human-readable name for the command, used as a main lookup string */ - abstract val i18nName: @Nls String + abstract val presentableName: @Nls String abstract val icon: Icon? /** @@ -72,7 +73,7 @@ abstract class CompletionCommand : UserDataHolderBase() { abstract fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) override fun toString(): String { - return "CompletionCommand(name='$name', class='${this::class.simpleName}')" + return "CompletionCommand(name='$commandId', class='${this::class.simpleName}')" } diff --git a/platform/lang-api/resources/messages/CodeInsightBundle.properties b/platform/lang-api/resources/messages/CodeInsightBundle.properties index 554b7b30ceb8..59ee7dcc7713 100644 --- a/platform/lang-api/resources/messages/CodeInsightBundle.properties +++ b/platform/lang-api/resources/messages/CodeInsightBundle.properties @@ -615,10 +615,11 @@ command.completion.filter.hint=press ''{0}'' to show commands command.completion.project.tool.text=Project tool command.completion.recent.files.text=Recent files command.completion.generate.text=Generate ''{0}'' -command.completion.psi.element.comment.line.text=Comment with Line Comment -command.completion.psi.element.comment.block.text=Comment with Block Comment +command.completion.psi.element.comment.line.text=Comment/uncomment with Line Comment +command.completion.psi.element.comment.block.text=Comment/uncomment with Block Comment command.completion.copy.reference.description=Copy reference for ''{0}'' command.completion.copy.reference.text=Copy reference +command.completion.GotoDeclaration.text=Go to declaration options.command.completion.display.name=Command Completion options.command.completion.enabled=Enable command completion options.command.completion.display.comment=Command completion allows you to execute actions by calling completion in certain contexts \ No newline at end of file diff --git a/platform/lang-impl/api-dump-experimental.txt b/platform/lang-impl/api-dump-experimental.txt index aad7242256e9..543c80dc38c5 100644 --- a/platform/lang-impl/api-dump-experimental.txt +++ b/platform/lang-impl/api-dump-experimental.txt @@ -189,11 +189,10 @@ 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:getI18nName():java.lang.String +- f:getCommandId():java.lang.String - f:getIcon():javax.swing.Icon -- f:getName():java.lang.String +- f:getPresentableName():java.lang.String - getPreview():com.intellij.codeInsight.intention.preview.IntentionPreviewInfo -- getSynonyms():java.util.List *a:com.intellij.codeInsight.completion.command.commands.AbstractFormatCodeCompletionCommandProvider - com.intellij.codeInsight.completion.command.CommandProvider - ():V @@ -212,11 +211,11 @@ c:com.intellij.codeInsight.actions.VcsFacade - b:(com.intellij.codeInsight.actions.CodeInsightAction,java.lang.String,java.lang.String,I,kotlin.jvm.internal.DefaultConstructorMarker):V - execute(I,com.intellij.psi.PsiFile,com.intellij.openapi.editor.Editor):V - f:getAction():com.intellij.codeInsight.actions.CodeInsightAction +- getCommandId():java.lang.String - f:getCustomI18nName():java.lang.String - f:getCustomName():java.lang.String -- getI18nName():java.lang.String - getIcon():javax.swing.Icon -- getName():java.lang.String +- getPresentableName():java.lang.String - f:setCustomI18nName(java.lang.String):V - f:setCustomName(java.lang.String):V *a:com.intellij.codeInsight.completion.command.commands.AbstractGoToDeclarationCompletionCommandProvider @@ -273,10 +272,10 @@ c:com.intellij.codeInsight.actions.VcsFacade - p:createCommand(com.intellij.codeInsight.completion.command.CommandCompletionProviderContext):com.intellij.codeInsight.completion.command.commands.ActionCompletionCommand - pf:createCommandWithNameIdentifier(com.intellij.codeInsight.completion.command.CommandCompletionProviderContext):com.intellij.codeInsight.completion.command.commands.ActionCompletionCommand - f:getActionId():java.lang.String +- f:getCommandId():java.lang.String - getCommands(com.intellij.codeInsight.completion.command.CommandCompletionProviderContext):java.util.List -- f:getI18nName():java.lang.String - f:getIcon():javax.swing.Icon -- f:getName():java.lang.String +- f:getPresentableName():java.lang.String - f:getPreviewText():java.lang.String - f:getPriority():java.lang.Integer - f:getSynonyms():java.util.List @@ -292,10 +291,10 @@ c:com.intellij.codeInsight.actions.VcsFacade - execute(I,com.intellij.psi.PsiFile,com.intellij.openapi.editor.Editor):V - f:getActionId():java.lang.String - getAdditionalInfo():java.lang.String +- getCommandId():java.lang.String - getHighlightInfo():com.intellij.codeInsight.completion.command.HighlightInfoLookup -- getI18nName():java.lang.String - getIcon():javax.swing.Icon -- getName():java.lang.String +- getPresentableName():java.lang.String - getPreview():com.intellij.codeInsight.intention.preview.IntentionPreviewInfo - getPriority():java.lang.Integer - getSynonyms():java.util.List diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionDocumentationProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionDocumentationProvider.kt index 15990dcfc3c2..dafbd18dba0f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionDocumentationProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/CommandCompletionDocumentationProvider.kt @@ -86,7 +86,7 @@ private class CommandCompletionDocumentationTarget( completionLookupElement.renderElement(presentation) return TargetPresentation.builder(presentation.itemText - ?: completionLookupElement.command.name).icon(presentation.icon).containerText(presentation.tailText).presentation() + ?: completionLookupElement.command.commandId).icon(presentation.icon).containerText(presentation.tailText).presentation() } override fun computeDocumentation(): DocumentationResult? { 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 7fbf31f8e54c..1b526f3c0365 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 @@ -161,13 +161,14 @@ internal class CommandCompletionProvider : CompletionProvider 50) { it.substring(0, 50) + "\u2026" } @@ -176,7 +177,7 @@ internal class CommandCompletionProvider : CompletionProvider = emptyList() ) : CompletionCommand(), DumbAware, CompletionCommandWithPreview { + + override val presentableName: @Nls String = presentableActionName + .replaceFirst("_", "") + .lowercase() + .replaceFirstChar { + if (it.isLowerCase()) it.titlecase(getDefault()) else it.toString() } + private val action: AnAction? = ActionManager.getInstance().getAction(actionId) override val additionalInfo: String? diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractChangeSignatureCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractChangeSignatureCompletionCommand.kt index 07985880fde4..971c7c4ac5b6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractChangeSignatureCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractChangeSignatureCompletionCommand.kt @@ -8,8 +8,8 @@ import com.intellij.psi.PsiFile abstract class AbstractChangeSignatureCompletionCommandProvider : ActionCommandProvider( actionId = "ChangeSignature", - name = "Change signature", - i18nName = ActionsBundle.message("action.ChangeSignature.text"), + commandId = "Change signature", + presentableName = ActionsBundle.message("action.ChangeSignature.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.ChangeSignature.description"), @@ -35,8 +35,8 @@ abstract class AbstractChangeSignatureCompletionCommandProvider : ActionCommandP override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand? { return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractCopyFQNCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractCopyFQNCompletionCommand.kt index 8a0a83ee64d9..5fbd94b5c772 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractCopyFQNCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractCopyFQNCompletionCommand.kt @@ -13,8 +13,8 @@ import com.intellij.psi.PsiNameIdentifierOwner abstract class AbstractCopyFQNCompletionCommandProvider : ActionCommandProvider(actionId = "CopyReference", - name = "Copy reference", - i18nName = CodeInsightBundle.message("command.completion.copy.reference.text"), + commandId = "Copy reference", + presentableName = CodeInsightBundle.message("command.completion.copy.reference.text"), icon = null, priority = -150, previewText = null) { @@ -45,8 +45,8 @@ abstract class AbstractCopyFQNCompletionCommandProvider : } val range = element.textRange ?: return null return ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = CodeInsightBundle.message("command.completion.copy.reference.description", element.text), diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractExtractConstantFieldParameterCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractExtractConstantFieldParameterCompletionCommand.kt index 8d43cba09c88..34a0cfc46f7b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractExtractConstantFieldParameterCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractExtractConstantFieldParameterCompletionCommand.kt @@ -7,8 +7,8 @@ import com.intellij.psi.PsiFile abstract class AbstractExtractConstantCompletionCommandProvider : ActionCommandProvider(actionId = "IntroduceConstant", - name = "Introduce constant", - i18nName = ActionsBundle.message("action.IntroduceConstant.text"), + commandId = "Introduce constant", + presentableName = ActionsBundle.message("action.IntroduceConstant.text"), icon = null, priority = -150, previewText = ActionsBundle.message("action.IntroduceConstant.description"), @@ -24,8 +24,8 @@ abstract class AbstractExtractConstantCompletionCommandProvider : abstract class AbstractExtractFieldCompletionCommandProvider : ActionCommandProvider(actionId = "IntroduceField", - name = "Introduce field", - i18nName = ActionsBundle.message("action.IntroduceField.text"), + commandId = "Introduce field", + presentableName = ActionsBundle.message("action.IntroduceField.text"), icon = null, priority = -150, previewText = ActionsBundle.message("action.IntroduceField.description"), @@ -40,8 +40,8 @@ abstract class AbstractExtractFieldCompletionCommandProvider : abstract class AbstractExtractParameterCompletionCommandProvider : ActionCommandProvider(actionId = "IntroduceParameter", - name = "Introduce parameter", - i18nName = ActionsBundle.message("action.IntroduceParameter.text"), + commandId = "Introduce parameter", + presentableName = ActionsBundle.message("action.IntroduceParameter.text"), icon = null, priority = -150, previewText = ActionsBundle.message("action.IntroduceParameter.description"), 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 fc248a31fd37..b85365025bb3 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 @@ -11,6 +11,7 @@ import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import org.jetbrains.annotations.Nls +import java.util.Locale.getDefault import javax.swing.Icon /** @@ -31,13 +32,15 @@ abstract class AbstractFormatCodeCompletionCommandProvider : } abstract class AbstractFormatCodeCompletionCommand : CompletionCommand(), CompletionCommandWithPreview { - final override val name: String + final override val commandId: String get() = "Format" - final override val i18nName: @Nls String + @Suppress("HardCodedStringLiteral") + final override val presentableName: @Nls String get() = ActionsBundle.message("action.ReformatCode.text") - override val synonyms: List - get() = listOf("Reformat") + .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 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 e4e5f7b602a3..8ffb5305efd9 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 @@ -80,9 +80,9 @@ abstract class AbstractGenerateCommandProvider : CommandProvider, DumbAware { var customName: String? = null, var customI18nName: @Nls String? = null, ) : CompletionCommand() { - override val name: String + override val commandId: String get() = customName ?: ("Generate \'" + action.templateText + "\'") - override val i18nName: @Nls String + override val presentableName: @Nls String get() = customI18nName ?: (CodeInsightBundle.message("command.completion.generate.text", action.templateText)) override val icon: Icon? get() = null diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToDeclarationCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToDeclarationCompletionCommand.kt index 51ee40cf7ac5..41c14e25703f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToDeclarationCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToDeclarationCompletionCommand.kt @@ -1,6 +1,7 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.completion.command.commands +import com.intellij.codeInsight.CodeInsightBundle import com.intellij.codeInsight.completion.command.CommandCompletionProviderContext import com.intellij.codeInsight.completion.command.getCommandContext import com.intellij.idea.ActionsBundle @@ -10,8 +11,8 @@ import com.intellij.psi.PsiFile abstract class AbstractGoToDeclarationCompletionCommandProvider : ActionCommandProvider(actionId = "GotoDeclaration", - name = "Go to declaration", - i18nName = ActionsBundle.message("action.GotoDeclaration.text"), + commandId = "Go to declaration", + presentableName = CodeInsightBundle.message("command.completion.GotoDeclaration.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.GotoDeclaration.description")) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToImplementationCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToImplementationCompletionCommand.kt index e2d62f0b7741..c55b969f566e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToImplementationCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToImplementationCompletionCommand.kt @@ -10,8 +10,8 @@ import com.intellij.psi.PsiFile abstract class AbstractGoToImplementationCompletionCommandProvider : ActionCommandProvider(actionId = "GotoImplementation", - name = "Go to implementation", - i18nName = ActionsBundle.message("action.GotoImplementation.text"), + commandId = "Go to implementation", + presentableName = ActionsBundle.message("action.GotoImplementation.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.GotoImplementation.description")){ diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToSuperCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToSuperCompletionCommand.kt index 564f8ce89a38..493fe4ca58d4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToSuperCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractGoToSuperCompletionCommand.kt @@ -10,8 +10,8 @@ import com.intellij.psi.PsiFile abstract class AbstractGoToSuperMethodCompletionCommandProvider : ActionCommandProvider(actionId = "GotoSuperMethod", - name = "Go to super method", - i18nName = ActionsBundle.message("action.GotoSuperMethod.text"), + commandId = "Go to super method", + presentableName = ActionsBundle.message("action.GotoSuperMethod.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.GotoSuperMethod.description")) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractInlineMethodCompletionCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractInlineMethodCompletionCommandProvider.kt index 696e643efa38..a4966f9e2fc1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractInlineMethodCompletionCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractInlineMethodCompletionCommandProvider.kt @@ -8,8 +8,8 @@ import com.intellij.psi.PsiFile abstract class AbstractInlineMethodCompletionCommandProvider : ActionCommandProvider(actionId = "Inline", - name = "Inline method", - i18nName = ActionsBundle.message("action.Inline.text"), + commandId = "Inline", + presentableName = ActionsBundle.message("action.Inline.text"), icon = null, priority = -150, previewText = null) { @@ -21,8 +21,8 @@ abstract class AbstractInlineMethodCompletionCommandProvider : override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand? { return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractMoveCopyClassCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractMoveCopyClassCompletionCommand.kt index 319a0895b898..74f88afdee5b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractMoveCopyClassCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractMoveCopyClassCompletionCommand.kt @@ -8,8 +8,8 @@ import com.intellij.psi.PsiFile abstract class AbstractMoveCompletionCommandProvider : ActionCommandProvider( actionId = "Move", - name = "Move element", - i18nName = ActionsBundle.message("action.Move.text"), + commandId = "Move", + presentableName = ActionsBundle.message("action.Move.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.Move.description"), @@ -34,8 +34,8 @@ abstract class AbstractMoveCompletionCommandProvider : ActionCommandProvider( override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand? { return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText) { @@ -56,8 +56,8 @@ abstract class AbstractMoveCompletionCommandProvider : ActionCommandProvider( abstract class AbstractCopyClassCompletionCommandProvider : ActionCommandProvider( actionId = "CopyElement", - name = "Copy class", - i18nName = ActionsBundle.message("action.CopyElement.text"), + commandId = "Copy", + presentableName = ActionsBundle.message("action.CopyElement.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.CopyElement.description"), @@ -82,8 +82,8 @@ abstract class AbstractCopyClassCompletionCommandProvider : ActionCommandProvide override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand? { return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractRenameActionCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractRenameActionCommandProvider.kt index 6864f9fcea2a..dcf648c4d525 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractRenameActionCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractRenameActionCommandProvider.kt @@ -14,8 +14,8 @@ import com.intellij.psi.PsiNameIdentifierOwner import com.intellij.psi.PsiNamedElement abstract class AbstractRenameActionCommandProvider : ActionCommandProvider(actionId = IdeActions.ACTION_RENAME, - name = "Rename", - i18nName = ActionsBundle.message("action.RenameElement.text"), + commandId = "Rename", + presentableName = ActionsBundle.message("action.RenameElement.text"), previewText = ActionsBundle.message("action.RenameElement.description"), synonyms = listOf("Rename", "Change name")) { override fun isApplicable(offset: Int, psiFile: PsiFile, editor: Editor?): Boolean { @@ -36,8 +36,8 @@ abstract class AbstractRenameActionCommandProvider : ActionCommandProvider(actio element = element.nameIdentifier } return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText, diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractShowUsagesActionCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractShowUsagesActionCompletionCommand.kt index 95793ac4f0fd..107f77bee1ee 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractShowUsagesActionCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/AbstractShowUsagesActionCompletionCommand.kt @@ -12,8 +12,8 @@ import com.intellij.psi.PsiFile abstract class AbstractShowUsagesActionCompletionCommandProvider : ActionCommandProvider(actionId = ShowUsagesAction.ID, - name = "Show usages", - i18nName = ActionsBundle.message("action.ShowUsages.text"), + commandId = "Show usages", + presentableName = ActionsBundle.message("action.ShowUsages.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.ShowUsages.description")) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectErrorFixCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectErrorFixCompletionCommand.kt index 1c287bcf1f3f..1970ddc70eb1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectErrorFixCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectErrorFixCompletionCommand.kt @@ -29,7 +29,7 @@ import org.jetbrains.annotations.Nls import javax.swing.Icon internal class DirectErrorFixCompletionCommand( - override val name: @Nls String, + override val commandId: @Nls String, override val priority: Int?, override val icon: Icon?, override val highlightInfo: HighlightInfoLookup, @@ -37,8 +37,8 @@ internal class DirectErrorFixCompletionCommand( private val previewProvider: () -> IntentionPreviewInfo?, ) : CompletionCommand(), CompletionCommandWithPreview { - override val i18nName: @Nls String - get() = name + override val presentableName: @Nls String + get() = commandId override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { if (editor == null) return @@ -85,7 +85,7 @@ internal class DirectErrorFixCompletionCommand( if (currentName.startsWith("") && currentName.endsWith("")) { currentName = currentName.substring(6, currentName.length - 7) } - if (currentName == name) { + if (currentName == commandId) { return@jobToIndicator fix.action } } @@ -95,7 +95,7 @@ internal class DirectErrorFixCompletionCommand( } } if (action == null) return - ShowIntentionActionsHandler.chooseActionAndInvoke(topLevelPsiFile, topLevelEditor, action, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(topLevelPsiFile, topLevelEditor, action, commandId) } override fun getPreview(): IntentionPreviewInfo? { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectInspectionFixCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectInspectionFixCompletionCommand.kt index 682e7f8c474a..e27233b9048e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectInspectionFixCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectInspectionFixCompletionCommand.kt @@ -34,7 +34,7 @@ import javax.swing.Icon internal class DirectInspectionFixCompletionCommand( private val inspectionId: String, - override val name: @Nls String, + override val commandId: @Nls String, override val priority: Int?, override val icon: Icon?, override val highlightInfo: HighlightInfoLookup, @@ -42,8 +42,8 @@ internal class DirectInspectionFixCompletionCommand( private val previewProvider: () -> IntentionPreviewInfo?, ) : CompletionCommand(), CompletionCommandWithPreview { - override val i18nName: @Nls String - get() = name + override val presentableName: @Nls String + get() = commandId override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { if (editor == null) return @@ -94,7 +94,7 @@ internal class DirectInspectionFixCompletionCommand( val fixes = descriptor.fixes ?: continue for (i in 0..fixes.size - 1) { val intentionAction = wrap(descriptor, i) - if (intentionAction.text == name && availableFor(psiFile, editor, targetOffset, intentionAction)) { + if (intentionAction.text == commandId && availableFor(psiFile, editor, targetOffset, intentionAction)) { return@readAction intentionAction } } @@ -108,7 +108,7 @@ internal class DirectInspectionFixCompletionCommand( val marker = editor.document.createRangeMarker(offset, offset) val targetMarker = editor.document.createRangeMarker(targetOffset, targetOffset) editor.caretModel.moveToOffset(targetOffset) - ShowIntentionActionsHandler.chooseActionAndInvoke(topLevelFile, topLevelEditor, action, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(topLevelFile, topLevelEditor, action, commandId) if (targetMarker.isValid && targetMarker.startOffset != editor.caretModel.offset) { //probably, intention moves the cursor return diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectIntentionCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectIntentionCommandProvider.kt index 11cd199a065b..24bdeb48e7c0 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectIntentionCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/DirectIntentionCommandProvider.kt @@ -240,7 +240,7 @@ internal class DirectIntentionCommandProvider : CommandProvider { result[toolId + ":" + action.text] = (DirectInspectionFixCompletionCommand( inspectionId = toolId, - name = action.text, + commandId = action.text, priority = priority, icon = icon, highlightInfo = HighlightInfoLookup(textRange, level.attributesKey, priority), @@ -335,7 +335,7 @@ internal class DirectIntentionCommandProvider : CommandProvider { @Suppress("HardCodedStringLiteral") name = name.substring(prefix.length, name.length - suffix.length) } - val command = DirectErrorFixCompletionCommand(name = name, + val command = DirectErrorFixCompletionCommand(commandId = name, priority = 100, icon = AllIcons.Actions.QuickfixBulb, highlightInfo = HighlightInfoLookup(TextRange(info.startOffset, info.endOffset), diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/IntentionCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/IntentionCompletionCommand.kt index d2c08ddbfb47..b24e41eb9399 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/IntentionCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/IntentionCompletionCommand.kt @@ -22,10 +22,10 @@ internal class IntentionCompletionCommand( private val previewProvider: () -> IntentionPreviewInfo?, ) : CompletionCommand(), CompletionCommandWithPreview { - override val name: String + override val commandId: String get() = intentionAction.text - override val i18nName: @Nls String + override val presentableName: @Nls String get() = intentionAction.text override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { @@ -43,7 +43,7 @@ internal class IntentionCompletionCommand( editor.putUserData(KEY_FORCE_CARET_OFFSET, ForceOffsetData(myOffset, offset)) } if (availableFor) { - ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, intentionAction.action, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, intentionAction.action, commandId) } if (!intentionAction.action.startInWriteAction() || (targetMarker.isValid && targetMarker.startOffset != editor.caretModel.offset)) { //probably, intention moves the cursor or async gui diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/LineCommentCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/LineCommentCompletionCommand.kt index bb3a925871e7..a839855647e8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/LineCommentCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/LineCommentCompletionCommand.kt @@ -12,16 +12,16 @@ import com.intellij.psi.PsiFile */ internal class LineCommentCompletionCommandProvider : ActionCommandProvider(actionId = "CommentByLineComment", - name = "Comment line", - i18nName = ActionsBundle.message("action.CommentByLineComment.text"), + commandId = "Comment line", + presentableName = ActionsBundle.message("action.CommentByLineComment.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.CommentByLineComment.description")) { - override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand? { + override fun createCommand(context: CommandCompletionProviderContext): ActionCompletionCommand { return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/OptimizeImportCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/OptimizeImportCompletionCommand.kt index ca4dbe43d2f9..296fee8b92f2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/OptimizeImportCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/OptimizeImportCompletionCommand.kt @@ -8,8 +8,8 @@ import com.intellij.psi.PsiFile internal class OptimizeImportCompletionCommandProvider : ActionCommandProvider(actionId = "OptimizeImports", - name = "Optimize imports", - i18nName = ActionsBundle.message("action.OptimizeImports.text"), + commandId = "Optimize imports", + presentableName = ActionsBundle.message("action.OptimizeImports.text"), icon = null, priority = -100, previewText = ActionsBundle.message("action.OptimizeImports.description")) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/PsiElementCommentCompletionCommand.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/PsiElementCommentCompletionCommand.kt index 0d2277892c2d..a44be37cb729 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/PsiElementCommentCompletionCommand.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/PsiElementCommentCompletionCommand.kt @@ -16,8 +16,8 @@ import com.intellij.psi.util.PsiTreeUtil internal class PsiElementCommentByBlockCompletionCommandProvider : ActionCommandProvider( actionId = "CommentByBlockComment", - name = "Comment/uncomment by block comment", - i18nName = CodeInsightBundle.message("command.completion.psi.element.comment.block.text"), + commandId = "Comment/uncomment by block comment", + presentableName = CodeInsightBundle.message("command.completion.psi.element.comment.block.text"), previewText = ActionsBundle.message("action.CommentByBlockComment.description")) { override fun isApplicable(offset: Int, psiFile: PsiFile, editor: Editor?): Boolean { if (!super.isApplicable(offset, psiFile, editor)) return false @@ -31,8 +31,8 @@ internal class PsiElementCommentByBlockCompletionCommandProvider : ActionCommand val range = element.textRange ?: return null val adjustedName = if (element is PsiComment) "Uncomment" else "Comment by block comment" return object : ActionCompletionCommand(actionId = super.actionId, - name = adjustedName, - i18nName = super.i18nName, + commandId = adjustedName, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText, @@ -55,8 +55,8 @@ internal class PsiElementCommentByBlockCompletionCommandProvider : ActionCommand internal class PsiElementCommentByLineCompletionCommandProvider : ActionCommandProvider( actionId = "CommentByLineComment", - name = "Comment by line comment", - i18nName = CodeInsightBundle.message("command.completion.psi.element.comment.line.text"), + commandId = "Comment by line comment", + presentableName = CodeInsightBundle.message("command.completion.psi.element.comment.line.text"), previewText = ActionsBundle.message("action.CommentByLineComment.description")) { override fun isApplicable(offset: Int, psiFile: PsiFile, editor: Editor?): Boolean { if (!super.isApplicable(offset, psiFile, editor)) return false @@ -79,8 +79,8 @@ internal class PsiElementCommentByLineCompletionCommandProvider : ActionCommandP val element = getHighLevelContext(context.offset, context.psiFile) ?: return null val range = element.textRange ?: return null return object : ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText, diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/RenameActionCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/RenameActionCommandProvider.kt index 215701f48127..c62f50cc6848 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/RenameActionCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/RenameActionCommandProvider.kt @@ -15,8 +15,8 @@ import com.intellij.psi.PsiNamedElement @Deprecated("Use AbstractRenameActionCommandProvider instead") internal class RenameActionCommandProvider : ActionCommandProvider(actionId = IdeActions.ACTION_RENAME, - name = "Rename", - i18nName = ActionsBundle.message("action.RenameElement.text"), + commandId = "Rename", + presentableName = ActionsBundle.message("action.RenameElement.text"), previewText = ActionsBundle.message("action.RenameElement.description"), synonyms = listOf("Rename", "Change name")) { override fun isApplicable(offset: Int, psiFile: PsiFile, editor: Editor?): Boolean { @@ -31,8 +31,8 @@ internal class RenameActionCommandProvider : ActionCommandProvider(actionId = Id element = element.nameIdentifier } return ActionCompletionCommand(actionId = super.actionId, - name = super.name, - i18nName = super.i18nName, + commandId = super.commandId, + presentableActionName = super.presentableName, icon = super.icon, priority = super.priority, previewText = super.previewText, diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/SimpleRunMarkerCommandProvider.kt b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/SimpleRunMarkerCommandProvider.kt index a96ec0db13b7..e8f374d23150 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/SimpleRunMarkerCommandProvider.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/command/commands/SimpleRunMarkerCommandProvider.kt @@ -2,11 +2,7 @@ package com.intellij.codeInsight.completion.command.commands import com.intellij.analysis.AnalysisBundle -import com.intellij.codeInsight.completion.command.CommandCompletionProviderContext -import com.intellij.codeInsight.completion.command.CommandProvider -import com.intellij.codeInsight.completion.command.CompletionCommand -import com.intellij.codeInsight.completion.command.getDataContext -import com.intellij.codeInsight.completion.command.getTargetContext +import com.intellij.codeInsight.completion.command.* import com.intellij.codeInsight.daemon.MergeableLineMarkerInfo import com.intellij.codeInsight.daemon.impl.GutterIntentionAction import com.intellij.codeInsight.daemon.impl.IntentionActionFilter @@ -17,16 +13,7 @@ import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler import com.intellij.execution.lineMarker.LineMarkerActionWrapper import com.intellij.execution.lineMarker.RunLineMarkerContributor.Info import com.intellij.execution.lineMarker.RunLineMarkerProvider -import com.intellij.openapi.actionSystem.ActionGroup -import com.intellij.openapi.actionSystem.ActionManager -import com.intellij.openapi.actionSystem.ActionPlaces -import com.intellij.openapi.actionSystem.ActionUiKind -import com.intellij.openapi.actionSystem.AnAction -import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.DefaultActionGroup -import com.intellij.openapi.actionSystem.Presentation -import com.intellij.openapi.actionSystem.Separator -import com.intellij.openapi.actionSystem.UpdateSession +import com.intellij.openapi.actionSystem.* import com.intellij.openapi.actionSystem.impl.Utils import com.intellij.openapi.editor.Editor import com.intellij.openapi.keymap.KeymapUtil @@ -144,12 +131,12 @@ private fun collectActions( private class RunMarkerCompletionCommand( private val offsetElement: Int, - @NlsSafe override val name: String, + @param:NlsSafe override val commandId: String, override val icon: Icon?, override val additionalInfo: String?, ) : CompletionCommand(), PossiblyDumbAware { - override val i18nName: @Nls String - get() = "" + override val presentableName: @Nls String + get() = commandId override fun execute(offset: Int, psiFile: PsiFile, editor: Editor?) { val (_, collectedActions) = runWithModalProgressBlocking(psiFile.project, AnalysisBundle.message("scanning.scope.progress.title")) { @@ -162,7 +149,7 @@ private class RunMarkerCompletionCommand( cachedIntentions.wrapAndUpdateGutters() var intentionAction: IntentionAction? = null for (caching in cachedIntentions.gutters) { - if (caching.text == name) { + if (caching.text == commandId) { intentionAction = caching.action break } @@ -170,7 +157,7 @@ private class RunMarkerCompletionCommand( if (intentionAction == null) return if (editor == null) return if (ShowIntentionActionsHandler.availableFor(psiFile, editor, offset, intentionAction)) { - ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, intentionAction, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, intentionAction, commandId) } } } 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 3a39e2a6e4c2..ad72eb81432f 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 @@ -82,9 +82,9 @@ internal class KotlinCreateFromUsagesCompletionCommand(val ktClass: KtClass) : C (ktClass.symbol as? KaClassSymbol)?.memberScope?.declarations?.map { it.name?.identifier }?.filterNotNull()?.toSet() } ?: emptySet() - override val name: String + override val commandId: String get() = "Create method from usage" - override val i18nName: @Nls String + override val presentableName: @Nls String get() = QuickFixBundle.message("create.method.from.usage.family") override val icon: Icon? get() = null @@ -134,7 +134,7 @@ internal class KotlinCreateFromUsagesCompletionCommand(val ktClass: KtClass) : C it.javaClass.name == "org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.CreateKotlinCallableAction" && it.text.contains(KotlinBundle.message("text.member")) } ?: return - ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, action, name) + ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, action, commandId) } override fun customPrefixMatcher(prefix: String): PrefixMatcher { 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 a01bb40cbd03..b3508297f42a 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 @@ -68,9 +68,9 @@ private class KotlinDeleteCompletionCommand( override val highlightInfo: HighlightInfoLookup?, private val preview: IntentionPreviewInfo, ) : CompletionCommand(), CompletionCommandWithPreview, DumbAware { - override val name: String + override val commandId: String get() = "Delete element" - override val i18nName: @Nls String + override val presentableName: @Nls String get() = ActionsBundle.message("action.EditorDelete.text") override val icon: Icon? get() = null 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 29106bfc22fc..012aba6adeb0 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 @@ -117,7 +117,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.equals("Format", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.equals("Reformat code", ignoreCase = true) }) myFixture.checkResult( """ fun main() { @@ -137,7 +137,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment line", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with line", ignoreCase = true) }) myFixture.checkResult( """ fun main() { @@ -157,7 +157,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment by line", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with line", ignoreCase = true) }) myFixture.checkResult( """ //fun main() { @@ -177,7 +177,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Comment by block", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Comment with block", ignoreCase = true) }) myFixture.checkResult( """ /* @@ -395,7 +395,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - selectItem(elements.first { element -> element.lookupString.contains("Inline method", ignoreCase = true) }) + selectItem(elements.first { element -> element.lookupString.contains("Inline", ignoreCase = true) }) myFixture.checkResult( """ fun bar() { @@ -419,7 +419,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - assertTrue(elements.any { element -> element.lookupString.equals("Move element", ignoreCase = true) }) + assertTrue(elements.any { element -> element.lookupString.equals("Move", ignoreCase = true) }) } fun testCopyClass() { @@ -431,7 +431,7 @@ class K2CommandCompletionTest : KotlinLightCodeInsightFixtureTestCase() { """.trimIndent() ) val elements = myFixture.completeBasic() - assertTrue(elements.any { element -> element.lookupString.equals("Copy class", ignoreCase = true) }) + assertTrue(elements.any { element -> element.lookupString.equals("Copy", ignoreCase = true) }) } fun testCreateFromUsages() {