[terminal] IJPL-252272 Refactor: create the same EditorTextDecorationApplier everywhere

Specify `consumeOnlyOnCtrlClick = true` even in tests, for consistency. Also, reorder parameters in `installHyperlinksProcessing`.

(cherry picked from commit cd1616a9cc9c71576380aa1be00032764464fb4e)

IJ-CR-217674

GitOrigin-RevId: a1254fae08d83c3523f50eaa2baaf2609b4a75ab
This commit is contained in:
Konstantin Hudyakov
2026-08-10 18:43:19 +00:00
committed by intellij-monorepo-bot
parent 15bf2b3645
commit 77ebc56595
3 changed files with 8 additions and 13 deletions
@@ -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<TerminalHyperlinksSessionId>(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(
@@ -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,
)
}
@@ -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")