[terminal] invalidate commandBlockHighlighterProvider on new extension available as well

(cherry picked from commit d64a5af1e80c32b0358471584f97186f15e3c273)

IJ-CR-146871

GitOrigin-RevId: 5e9f743bc4f780d1a6f39d4e15da28518fe6a6a2
This commit is contained in:
Sergey Simonchik
2024-10-16 15:18:06 +02:00
committed by intellij-monorepo-bot
parent 0c378f7061
commit b8fe877ec9

View File

@@ -2,9 +2,8 @@
package org.jetbrains.plugins.terminal.block.output.highlighting
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.editor.event.DocumentEvent
import com.intellij.openapi.extensions.ExtensionPointListener
import com.intellij.openapi.extensions.PluginDescriptor
import com.intellij.openapi.util.ClearableLazyValue
import org.jetbrains.plugins.terminal.block.output.CommandBlock
import org.jetbrains.plugins.terminal.block.output.TerminalOutputModel
@@ -21,11 +20,12 @@ import org.jetbrains.plugins.terminal.block.ui.invokeLater
* 2) at least two highlighters are applicable
*/
internal class CompositeTerminalTextHighlighter(
private val terminalOutputModel: TerminalOutputModel,
terminalOutputModel: TerminalOutputModel,
terminalTextHighlighter: TerminalTextHighlighter,
parentDisposable: Disposable,
) : CompositeEditorHighlighter(terminalTextHighlighter) {
// should be accessed in EDT only
private val terminalCommandBlockHighlighters: ClearableLazyValue<List<TerminalCommandBlockHighlighter>> = ClearableLazyValue.create {
COMMAND_BLOCK_HIGHLIGHTER_PROVIDER_EP_NAME
.extensionList
@@ -38,11 +38,9 @@ internal class CompositeTerminalTextHighlighter(
setCommandBlock(block)
}
})
COMMAND_BLOCK_HIGHLIGHTER_PROVIDER_EP_NAME.addExtensionPointListener(object : ExtensionPointListener<TerminalCommandBlockHighlighterProvider> {
override fun extensionRemoved(extension: TerminalCommandBlockHighlighterProvider, pluginDescriptor: PluginDescriptor) {
invokeLater {
terminalCommandBlockHighlighters.drop()
}
COMMAND_BLOCK_HIGHLIGHTER_PROVIDER_EP_NAME.addChangeListener(Runnable {
invokeLater(modalityState = ModalityState.any()) {
terminalCommandBlockHighlighters.drop()
}
}, parentDisposable)
}