diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/hyperlinks/FrontendTerminalHyperlinksProcessing.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/hyperlinks/FrontendTerminalHyperlinksProcessing.kt index 7c99f4cc6521..4d1fbd824a11 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/hyperlinks/FrontendTerminalHyperlinksProcessing.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/hyperlinks/FrontendTerminalHyperlinksProcessing.kt @@ -5,7 +5,6 @@ import com.intellij.execution.impl.EditorTextDecorationApplier import com.intellij.execution.impl.buildHighlighting import com.intellij.execution.impl.buildHyperlink import com.intellij.execution.impl.buildInlay -import com.intellij.execution.impl.createEditorTextDecorationApplier import com.intellij.openapi.Disposable import com.intellij.openapi.application.EDT import com.intellij.openapi.application.ModalityState @@ -13,7 +12,6 @@ import com.intellij.openapi.application.UI import com.intellij.openapi.application.asContextElement import com.intellij.openapi.diagnostic.fileLogger import com.intellij.openapi.editor.event.EditorMouseEvent -import com.intellij.openapi.editor.ex.EditorEx import com.intellij.openapi.project.Project import com.intellij.platform.eel.EelDescriptor import com.intellij.platform.project.projectId @@ -76,13 +74,10 @@ import kotlin.time.Duration.Companion.seconds fun installHyperlinksProcessing( project: Project, outputModel: TerminalOutputModel, - editor: EditorEx, + decorationApplier: EditorTextDecorationApplier, sessionModel: TerminalSessionModel, eelDescriptor: EelDescriptor, coroutineScope: CoroutineScope, - // A single applier must be shared per editor (its click/hover handling uses editor-global markup), - // so callers that also render other decorations (e.g. OSC8 links) can pass a shared instance. - applier: EditorTextDecorationApplier = createEditorTextDecorationApplier(editor, coroutineScope.asDisposable()), ): FrontendTerminalHyperlinkFacade { // The modification stamp of the most recent highlighting task whose // `TerminalHyperlinksOutputEvent.TaskFinished` event has been observed. @@ -90,10 +85,10 @@ fun installHyperlinksProcessing( val sessionIdDeferred = CompletableDeferred(coroutineScope.coroutineContext.job) coroutineScope.launch { - processHyperlinks(project, outputModel, sessionModel, eelDescriptor, sessionIdDeferred, applier, lastFinishedTaskStamp) + processHyperlinks(project, outputModel, sessionModel, eelDescriptor, sessionIdDeferred, decorationApplier, lastFinishedTaskStamp) } - return FrontendTerminalHyperlinkFacade(sessionIdDeferred, applier, lastFinishedTaskStamp) + return FrontendTerminalHyperlinkFacade(sessionIdDeferred, decorationApplier, lastFinishedTaskStamp) } private suspend fun processHyperlinks( diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt index af3022f1adab..80de503d2b2a 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/view/impl/TerminalViewImpl.kt @@ -391,20 +391,18 @@ class TerminalViewImpl( outputBufferHyperlinksFacade = installHyperlinksProcessing( project = project, outputModel = outputModel, - editor = outputEditor, + decorationApplier = outputDecorationApplier, sessionModel = sessionModel, eelDescriptor = eelDescriptor, coroutineScope = coroutineScope.childScope("Output Buffer Hyperlinks"), - applier = outputDecorationApplier, ) alternateBufferHyperlinksFacade = installHyperlinksProcessing( project = project, outputModel = alternateBufferModel, - editor = alternateBufferEditor, + decorationApplier = alternateBufferDecorationApplier, sessionModel = sessionModel, eelDescriptor = eelDescriptor, coroutineScope = coroutineScope.childScope("Alternate Buffer Hyperlinks"), - applier = alternateBufferDecorationApplier, ) } diff --git a/plugins/terminal/tests/src/com/intellij/terminal/tests/reworked/hyperlinks/TerminalHyperlinksProcessingTest.kt b/plugins/terminal/tests/src/com/intellij/terminal/tests/reworked/hyperlinks/TerminalHyperlinksProcessingTest.kt index c3ac08b67c6b..cb864d963c96 100644 --- a/plugins/terminal/tests/src/com/intellij/terminal/tests/reworked/hyperlinks/TerminalHyperlinksProcessingTest.kt +++ b/plugins/terminal/tests/src/com/intellij/terminal/tests/reworked/hyperlinks/TerminalHyperlinksProcessingTest.kt @@ -5,6 +5,7 @@ import com.intellij.execution.filters.ConsoleFilterProvider import com.intellij.execution.filters.Filter import com.intellij.execution.filters.HyperlinkInfo import com.intellij.execution.impl.InlayProvider +import com.intellij.execution.impl.createEditorTextDecorationApplier import com.intellij.openapi.application.EDT import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.asContextElement @@ -29,6 +30,7 @@ import com.intellij.testFramework.ExtensionTestUtil import com.intellij.testFramework.common.timeoutRunBlocking import com.intellij.testFramework.fixtures.BasePlatformTestCase import com.intellij.util.AwaitCancellationAndInvoke +import com.intellij.util.asDisposable import com.intellij.util.awaitCancellationAndInvoke import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -647,7 +649,7 @@ internal class TerminalHyperlinksProcessingTest : BasePlatformTestCase() { private val hyperlinkFacade = installHyperlinksProcessing( project = project, outputModel = outputModel, - editor = editor, + decorationApplier = createEditorTextDecorationApplier(editor, coroutineScope.asDisposable(), consumeOnlyOnCtrlClick = true), sessionModel = createSessionModel(), eelDescriptor = LocalEelDescriptor, coroutineScope = coroutineScope.childScope("HyperlinksProcessing")