mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
[editor] IJPL-164140 Floating code toolbar is not configurable for JSON, XML, YAML and SQL files
(cherry picked from commit 9d3a74bf1433284ed0fb7e6e2b554926966110e7) IJ-CR-148640 GitOrigin-RevId: 3c215330677d9e7730aaa04fbdd9fcffdbf3d7ba
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7c6d11a5be
commit
0ad7df3289
@@ -1525,8 +1525,8 @@
|
||||
<lang.unwrapDescriptor language="JAVA" implementationClass="com.intellij.codeInsight.unwrap.JavaUnwrapDescriptor"/>
|
||||
<codeInsight.surroundWithRangeAdjuster
|
||||
implementation="com.intellij.codeInsight.generation.surroundWith.JavaSurroundWithStatementRangeAdjuster"/>
|
||||
<lang.floatingToolbarCustomizer language="JAVA"
|
||||
implementationClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$DefaultGroup"/>
|
||||
<lang.floatingToolbar language="JAVA"/>
|
||||
|
||||
<lang.surroundDescriptor language="JAVA"
|
||||
implementationClass="com.intellij.codeInsight.generation.surroundWith.JavaExpressionSurroundDescriptor"/>
|
||||
<lang.surroundDescriptor language="JAVA"
|
||||
|
||||
@@ -130,8 +130,7 @@
|
||||
|
||||
<json.jsonStandardComplianceProvider implementation="com.intellij.json.jsonc.JsoncComplianceProvider"/>
|
||||
|
||||
<lang.floatingToolbarCustomizer language="JSON"
|
||||
implementationClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$MinimalGroup"/>
|
||||
<lang.floatingToolbar language="JSON" minimal="true"/>
|
||||
|
||||
<pluginSuggestionProvider implementation="com.jetbrains.jsonSchema.wiremock.WireMockSuggestionProvider"/>
|
||||
</extensions>
|
||||
|
||||
@@ -382,16 +382,14 @@ c:com.intellij.openapi.wm.impl.welcomeScreen.TabbedWelcomeScreen
|
||||
- com.intellij.ui.components.JBLayeredPane
|
||||
- <init>(javax.swing.JComponent,java.lang.String,Z,Z,java.lang.Runnable):V
|
||||
- getPreferredSize():java.awt.Dimension
|
||||
*:com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomization
|
||||
- a:isToolbarAvailable():Z
|
||||
*:com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer
|
||||
- a:getActionGroup():java.lang.String
|
||||
*f:com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$DefaultGroup
|
||||
- com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer
|
||||
- <init>():V
|
||||
- getActionGroup():java.lang.String
|
||||
*c:com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$MinimalGroup
|
||||
- com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer
|
||||
- <init>():V
|
||||
- getActionGroup():java.lang.String
|
||||
*c:com.intellij.ui.components.JBTreeTable
|
||||
- javax.swing.JComponent
|
||||
- com.intellij.ui.tree.TreePathBackgroundSupplier
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// 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.ui.codeFloatingToolbar
|
||||
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
@@ -6,6 +6,7 @@ import com.intellij.openapi.actionSystem.ex.CustomComponentAction
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButtonWithText
|
||||
import javax.swing.JComponent
|
||||
|
||||
@Deprecated("Implement such group on your own")
|
||||
class DropdownActionGroup: DefaultActionGroup(), CustomComponentAction {
|
||||
|
||||
override fun createCustomComponent(presentation: Presentation, place: String): JComponent {
|
||||
|
||||
@@ -4,12 +4,79 @@ package com.intellij.ui.codeFloatingToolbar
|
||||
import com.intellij.lang.IdeLanguageCustomization
|
||||
import com.intellij.lang.Language
|
||||
import com.intellij.lang.LanguageExtension
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.extensions.PluginAware
|
||||
import com.intellij.openapi.extensions.PluginDescriptor
|
||||
import com.intellij.openapi.extensions.RequiredElement
|
||||
import com.intellij.util.xmlb.annotations.Attribute
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
private val EP = LanguageExtension<FloatingToolbarCustomizer>("com.intellij.lang.floatingToolbarCustomizer")
|
||||
@Deprecated("Use lang.floatingToolbar instead")
|
||||
private val DEPRECATED_EP = LanguageExtension<FloatingToolbarCustomizer>("com.intellij.lang.floatingToolbarCustomizer")
|
||||
private val EP: ExtensionPointName<FloatingToolbarLanguageBean> = ExtensionPointName.create("com.intellij.lang.floatingToolbar")
|
||||
|
||||
private const val FLOATING_CODE_TOOLBAR_GROUP_ID = "Floating.CodeToolbar"
|
||||
|
||||
private fun forLanguage(language: Language): FloatingToolbarLanguageBean? {
|
||||
return EP.extensionList.firstOrNull { bean -> bean.language == language.id }
|
||||
}
|
||||
|
||||
internal fun findActionGroupFor(language: Language): String? {
|
||||
return EP.allForLanguage(language).firstNotNullOfOrNull { it.getActionGroup() }
|
||||
val bean = forLanguage(language)
|
||||
if (bean != null) {
|
||||
if (bean.isMinimal) {
|
||||
// check if any of the primary languages have full toolbar available
|
||||
val hasPrimaryToolbar = IdeLanguageCustomization.getInstance().primaryIdeLanguages.any {
|
||||
val bean = forLanguage(it)
|
||||
bean != null && !bean.isMinimal
|
||||
}
|
||||
|
||||
if (!hasPrimaryToolbar) return null
|
||||
}
|
||||
|
||||
val customization = bean.getCustomization()
|
||||
if (customization != null && !customization.isToolbarAvailable()) {
|
||||
return null
|
||||
}
|
||||
|
||||
return FLOATING_CODE_TOOLBAR_GROUP_ID
|
||||
}
|
||||
|
||||
return DEPRECATED_EP.allForLanguage(language)
|
||||
.firstNotNullOfOrNull { it.getActionGroup() }
|
||||
}
|
||||
|
||||
internal fun hasMinimalFloatingToolbar(language: Language): Boolean {
|
||||
return forLanguage(language)?.isMinimal == true
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
interface FloatingToolbarCustomization {
|
||||
fun isToolbarAvailable(): Boolean
|
||||
}
|
||||
|
||||
internal class FloatingToolbarLanguageBean : PluginAware {
|
||||
private var pluginDescriptor: PluginDescriptor? = null
|
||||
|
||||
override fun setPluginDescriptor(pluginDescriptor: PluginDescriptor) {
|
||||
this.pluginDescriptor = pluginDescriptor
|
||||
}
|
||||
|
||||
@Attribute("language")
|
||||
@RequiredElement
|
||||
var language: String? = null
|
||||
|
||||
@Attribute("minimal")
|
||||
var isMinimal: Boolean = false
|
||||
|
||||
@Attribute("customizationClass")
|
||||
var customizationClass: String? = null
|
||||
|
||||
fun getCustomization(): FloatingToolbarCustomization? {
|
||||
if (customizationClass == null) return null
|
||||
return ApplicationManager.getApplication().instantiateClass(customizationClass!!, pluginDescriptor!!)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -17,9 +84,9 @@ internal fun findActionGroupFor(language: Language): String? {
|
||||
*
|
||||
* @see CodeFloatingToolbar
|
||||
* @see [FloatingToolbarCustomizer.DefaultGroup]
|
||||
* @see [FloatingToolbarCustomizer.MinimalGroup]
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
@Deprecated("Use lang.floatingToolbar instead")
|
||||
interface FloatingToolbarCustomizer {
|
||||
/**
|
||||
* @return id of the action group to be shown in the toolbar, or null if the toolbar shouldn't be available
|
||||
@@ -27,25 +94,8 @@ interface FloatingToolbarCustomizer {
|
||||
fun getActionGroup(): String?
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@Deprecated("Use lang.floatingToolbar instead")
|
||||
class DefaultGroup : FloatingToolbarCustomizer {
|
||||
override fun getActionGroup(): String {
|
||||
return "Floating.CodeToolbar"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions for languages that do not support refactoring capabilities such as Extract and Surround, e.g., JSON and XML.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
open class MinimalGroup : FloatingToolbarCustomizer {
|
||||
override fun getActionGroup(): String? {
|
||||
val hasPrimaryToolbar = IdeLanguageCustomization.getInstance().primaryIdeLanguages
|
||||
.any { EP.allForLanguage(it).isNotEmpty() }
|
||||
|
||||
// primary language does not support floating toolbar, ignore in this IDE
|
||||
if (!hasPrimaryToolbar) return null
|
||||
|
||||
return "Floating.CodeToolbar.Minimal"
|
||||
}
|
||||
override fun getActionGroup(): String = FLOATING_CODE_TOOLBAR_GROUP_ID
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.ui.codeFloatingToolbar
|
||||
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.ex.CustomComponentAction
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButtonWithText
|
||||
import javax.swing.JComponent
|
||||
|
||||
internal class RefactorDropdownActionGroup: DefaultActionGroup(), CustomComponentAction {
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
override fun createCustomComponent(presentation: Presentation, place: String): JComponent {
|
||||
return object: ActionButtonWithText(this, presentation, place, ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE) {
|
||||
override fun actionPerformed(event: AnActionEvent) {
|
||||
showActionGroupPopup(this@RefactorDropdownActionGroup, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun update(e: AnActionEvent) {
|
||||
val language = e.getData(PlatformDataKeys.LANGUAGE)
|
||||
if (language != null) {
|
||||
e.presentation.isEnabledAndVisible = !hasMinimalFloatingToolbar(language)
|
||||
}
|
||||
else {
|
||||
val activeActions = ActionGroupUtil.getActiveActions(this, e)
|
||||
e.presentation.isVisible = true
|
||||
e.presentation.isEnabled = activeActions.isNotEmpty
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2379,7 +2379,6 @@ action.DeleteRunConfiguration.text=Delete
|
||||
action.DeleteRunConfiguration.description=Delete the run configuration
|
||||
|
||||
group.Floating.CodeToolbar.text=Floating Code Toolbar
|
||||
group.Floating.CodeToolbar.Minimal.text=Floating Code Toolbar (Minimal)
|
||||
action.Floating.CodeToolbar.Disable.text=Don't Show Toolbar
|
||||
action.CodeFloatingToolbar.GotoNextMenu.text=Go to Next Toolbar Menu
|
||||
action.CodeFloatingToolbar.GotoPrevMenu.text=Go to Previous Toolbar Menu
|
||||
|
||||
@@ -432,6 +432,11 @@
|
||||
<with attribute="implementationClass" implements="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer"/>
|
||||
</extensionPoint>
|
||||
|
||||
<extensionPoint name="lang.floatingToolbar" beanClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarLanguageBean"
|
||||
dynamic="true">
|
||||
<with attribute="customizationClass" implements="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomization"/>
|
||||
</extensionPoint>
|
||||
|
||||
<extensionPoint name="codeInsight.typeInfo" beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
|
||||
<with attribute="implementationClass" implements="com.intellij.lang.ExpressionTypeProvider"/>
|
||||
</extensionPoint>
|
||||
|
||||
@@ -384,8 +384,7 @@
|
||||
|
||||
<inspection.basicVisitor class="com.intellij.psi.XmlElementVisitor"/>
|
||||
|
||||
<lang.floatingToolbarCustomizer language="XML"
|
||||
implementationClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$MinimalGroup"/>
|
||||
<lang.floatingToolbar language="XML" minimal="true"/>
|
||||
|
||||
<localInspection language="XML" shortName="CheckTagEmptyBody" enabledByDefault="true" level="WARNING"
|
||||
bundle="messages.XmlBundle" key="xml.inspections.check.tag.empty.body"
|
||||
|
||||
@@ -468,13 +468,10 @@
|
||||
</group>
|
||||
|
||||
<!-- Code -->
|
||||
<group id="Floating.CodeToolbar.Minimal" popup="false" searchable="false">
|
||||
</group>
|
||||
|
||||
<group id="Floating.CodeToolbar" popup="false" searchable="false">
|
||||
<group id="Floating.CodeToolbar.Extract" popup="true" class="com.intellij.ui.codeFloatingToolbar.DropdownActionGroup"
|
||||
<group id="Floating.CodeToolbar.Extract" popup="true" class="com.intellij.ui.codeFloatingToolbar.RefactorDropdownActionGroup"
|
||||
searchable="false" />
|
||||
<group id="Floating.CodeToolbar.Surround" popup="true" class="com.intellij.ui.codeFloatingToolbar.DropdownActionGroup"
|
||||
<group id="Floating.CodeToolbar.Surround" popup="true" class="com.intellij.ui.codeFloatingToolbar.RefactorDropdownActionGroup"
|
||||
searchable="false">
|
||||
<!--suppress PluginXmlCapitalization -->
|
||||
<action id="Floating.CodeToolbar.SurroundWithTryCatch" class="com.intellij.codeInsight.generation.actions.SurroundWithActionBase" />
|
||||
@@ -619,7 +616,6 @@
|
||||
<action id="CommentByLineComment" class="com.intellij.codeInsight.generation.actions.CommentByLineCommentAction"
|
||||
icon="AllIcons.Actions.InlayRenameInComments">
|
||||
<add-to-group group-id="Floating.CodeToolbar" anchor="after" relative-to-action="Floating.CodeToolbar.Surround" />
|
||||
<add-to-group group-id="Floating.CodeToolbar.Minimal" anchor="last" />
|
||||
</action>
|
||||
<action id="CommentByBlockComment" class="com.intellij.codeInsight.generation.actions.CommentByBlockCommentAction"/>
|
||||
</group>
|
||||
@@ -627,7 +623,6 @@
|
||||
<group id="CodeFormatGroup">
|
||||
<action id="ReformatCode" class="com.intellij.codeInsight.actions.ReformatCodeAction" icon="AllIcons.Actions.ReformatCode">
|
||||
<add-to-group group-id="Floating.CodeToolbar" anchor="after" relative-to-action="CommentByLineComment" />
|
||||
<add-to-group group-id="Floating.CodeToolbar.Minimal" anchor="after" relative-to-action="CommentByLineComment" />
|
||||
<synonym key="action.ReformatCode.synonym1"/>
|
||||
</action>
|
||||
<action id="ShowReformatFileDialog" class="com.intellij.codeInsight.actions.ShowReformatFileDialog"/>
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
<gotoDeclarationHandler implementation="org.jetbrains.kotlin.idea.codeInsight.KotlinGotoValVarTypeHandler"/>
|
||||
<focusModeProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.core.KotlinFocusModeProvider" />
|
||||
|
||||
<lang.floatingToolbarCustomizer language="kotlin" implementationClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$DefaultGroup"/>
|
||||
<lang.floatingToolbar language="kotlin"/>
|
||||
|
||||
<lang.foldingBuilder
|
||||
language="kotlin"
|
||||
|
||||
@@ -128,8 +128,7 @@
|
||||
<psi.referenceContributor language="yaml" implementation="org.jetbrains.yaml.YAMLJsonSchemaIdReferenceContributor"/>
|
||||
<completion.contributor language="yaml" implementationClass="org.jetbrains.yaml.YAMLJsonSchemaInCommentCompletionContributor"/>
|
||||
|
||||
<lang.floatingToolbarCustomizer language="yaml"
|
||||
implementationClass="com.intellij.ui.codeFloatingToolbar.FloatingToolbarCustomizer$MinimalGroup"/>
|
||||
<lang.floatingToolbar language="yaml" minimal="true"/>
|
||||
|
||||
<pluginSuggestionProvider implementation="org.jetbrains.yaml.swagger.OpenApiSuggestionProvider"/>
|
||||
<intentionAction>
|
||||
|
||||
Reference in New Issue
Block a user