[floating toolbar] IDEA-322542: mark FloatingToolbarFilter deprecated

Preparing FloatingToolbarFilter for removal. FloatingToolbarCustomizer should be used instead.

GitOrigin-RevId: b065860565e5918aa09a87b2aa82008c242a04d3
This commit is contained in:
Alexandr Suhinin
2023-07-12 10:59:26 +03:00
committed by intellij-monorepo-bot
parent 8294e727eb
commit 1502cdc977
6 changed files with 38 additions and 22 deletions

View File

@@ -31,7 +31,7 @@ import javax.swing.JComponent
class CodeFloatingToolbar(
editor: Editor,
coroutineScope: CoroutineScope
): FloatingToolbar(editor, coroutineScope, "Floating.CodeToolbar") {
): FloatingToolbar(editor, coroutineScope) {
companion object {
private val FLOATING_TOOLBAR = Key<CodeFloatingToolbar>("floating.codeToolbar")
@@ -118,20 +118,21 @@ class CodeFloatingToolbar(
return editor.visualToLogicalPosition(lineStartPosition).line
}
override fun createActionGroup(): ActionGroup? {
val contextAwareActionGroupId = getContextAwareGroupId()
val mainActionGroup = CustomActionsSchema.getInstance().getCorrectedAction(contextAwareActionGroupId) as? ActionGroup ?: return super.createActionGroup()
val showIntentionsAction = CustomActionsSchema.getInstance().getCorrectedAction("ShowIntentionActions") ?: error("Can't find ShowIntentionActions action")
override fun createActionGroup(): ActionGroup {
val contextAwareActionGroupId = getContextAwareGroupId(editor) ?: FloatingToolbarCustomizer.DefaultGroup().getActionGroup()
val mainActionGroup = CustomActionsSchema.getInstance().getCorrectedAction(contextAwareActionGroupId) ?: error("Can't find groupId action")
val showIntentionsAction = CustomActionsSchema.getInstance().getCorrectedAction("ShowIntentionActions")
?: error("Can't find ShowIntentionActions action")
val configurationGroup = createConfigureGroup(contextAwareActionGroupId)
return DefaultActionGroup(showIntentionsAction, Separator.create(), mainActionGroup, Separator.create(), configurationGroup)
}
private fun getContextAwareGroupId(): String {
val project = editor.project ?: return defaultActionGroupId
private fun getContextAwareGroupId(editor: Editor): String? {
val project = editor.project ?: return null
val psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.document)
val elementAtOffset = psiFile?.findElementAt(editor.caretModel.primaryCaret.offset)
val targetLanguage = elementAtOffset?.language ?: return defaultActionGroupId
return FloatingToolbarCustomizer.findActionGroupFor(targetLanguage) ?: defaultActionGroupId
val targetLanguage = elementAtOffset?.language ?: return null
return FloatingToolbarCustomizer.findActionGroupFor(targetLanguage)
}
private fun createConfigureGroup(customizableGroupId: String): ActionGroup {

View File

@@ -16,9 +16,10 @@ internal class FloatingCodeToolbarEditorCustomizer: TextEditorCustomizer {
val editor = textEditor.editor
val project = editor.project ?: return
val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return
if (!FloatingToolbarFilter.isEnabledForLanguage(file.language)) {
return
}
val languages = file.viewProvider.languages
val isCustomizationAvailable = languages.any { language -> FloatingToolbarCustomizer.findActionGroupFor(language) != null }
val isEnabledExplicitly = FloatingToolbarFilter.isEnabledForLanguage(file.language)
if (!isCustomizationAvailable && !isEnabledExplicitly) return
val coroutineScope = FloatingCodeToolbarScope.createChildScope(project)
val toolbar = CodeFloatingToolbar(editor, coroutineScope)
Disposer.register(textEditor, toolbar)

View File

@@ -7,7 +7,7 @@ import org.jetbrains.annotations.ApiStatus
@ApiStatus.Experimental
@ApiStatus.Internal
public interface FloatingToolbarCustomizer {
interface FloatingToolbarCustomizer {
companion object {
private val EP = LanguageExtension<FloatingToolbarCustomizer>("com.intellij.lang.floatingToolbarCustomizer")
@@ -17,4 +17,10 @@ public interface FloatingToolbarCustomizer {
}
fun getActionGroup(): String?
class DefaultGroup: FloatingToolbarCustomizer {
override fun getActionGroup(): String {
return "Floating.CodeToolbar"
}
}
}

View File

@@ -11,7 +11,9 @@ import java.util.List;
* Extension point to enable floating code toolbar for specific language.
* @see CodeFloatingToolbar
* @see FloatingToolbarFilter.ENABLED
* @deprecated Use {@link FloatingToolbarCustomizer} instead.
*/
@Deprecated
public interface FloatingToolbarFilter {
LanguageExtension<FloatingToolbarFilter> EP = new LanguageExtension<>("com.intellij.lang.floatingToolbarFilter");
@@ -24,6 +26,10 @@ public interface FloatingToolbarFilter {
return ContainerUtil.all(supporters, supporter -> supporter.isEnabled());
}
/**
* @deprecated Use {@link FloatingToolbarCustomizer.DefaultGroup} instead.
*/
@Deprecated
class ENABLED implements FloatingToolbarFilter {
@Override
public boolean isEnabled() {

View File

@@ -4,7 +4,6 @@ package com.intellij.openapi.actionSystem.impl
import com.intellij.codeInsight.hint.HintManager
import com.intellij.codeInsight.hint.HintManagerImpl
import com.intellij.ide.IdeEventQueue
import com.intellij.ide.ui.customization.CustomActionsSchema
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.ActionGroup
import com.intellij.openapi.actionSystem.ActionPlaces
@@ -42,13 +41,12 @@ import kotlin.properties.Delegates
import kotlin.time.Duration.Companion.milliseconds
@ApiStatus.Internal
open class FloatingToolbar(
abstract class FloatingToolbar(
val editor: Editor,
/**
* This scope will be canceled on dispose.
*/
private val coroutineScope: CoroutineScope,
protected val defaultActionGroupId: String
private val coroutineScope: CoroutineScope
): Disposable {
protected var hint: LightweightHint? = null
private var buttonSize: Int by Delegates.notNull()
@@ -83,6 +81,8 @@ open class FloatingToolbar(
}
}
protected abstract fun createActionGroup(): ActionGroup?
open fun hideByOtherHints(): Boolean = false
@RequiresEdt
@@ -154,10 +154,6 @@ open class FloatingToolbar(
hide()
}
protected open fun createActionGroup(): ActionGroup? {
return CustomActionsSchema.getInstance().getCorrectedAction(defaultActionGroupId) as? ActionGroup
}
private suspend fun createUpdatedActionToolbar(targetComponent: JComponent): ActionToolbar {
return suspendCancellableCoroutine { continuation ->
createActionToolbar(targetComponent) {

View File

@@ -1,5 +1,7 @@
package org.intellij.plugins.markdown.ui.floating
import com.intellij.ide.ui.customization.CustomActionsSchema
import com.intellij.openapi.actionSystem.ActionGroup
import com.intellij.openapi.actionSystem.impl.FloatingToolbar
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.options.advanced.AdvancedSettings
@@ -13,7 +15,7 @@ import org.intellij.plugins.markdown.lang.psi.impl.MarkdownFile
internal class MarkdownFloatingToolbar(
editor: Editor,
coroutineScope: CoroutineScope
): FloatingToolbar(editor, coroutineScope, "Markdown.Toolbar.Floating") {
): FloatingToolbar(editor, coroutineScope) {
private val elementsToIgnore = listOf(
MarkdownElementTypes.CODE_FENCE,
MarkdownElementTypes.CODE_BLOCK,
@@ -32,4 +34,8 @@ internal class MarkdownFloatingToolbar(
override fun isEnabled(): Boolean {
return !AdvancedSettings.getBoolean("markdown.hide.floating.toolbar")
}
override fun createActionGroup(): ActionGroup? {
return CustomActionsSchema.getInstance().getCorrectedAction("Markdown.Toolbar.Floating") as? ActionGroup
}
}