mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[terminal] IJ-MR-158015 Refactor FusAwareTtyBasedDataStream
Use delegation instead of inheritance. Make the class private. GitOrigin-RevId: 249caf3ac6ab166dd715e172692477f81949ebd5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
daef3c9e81
commit
dc39c87f5f
@@ -15,6 +15,7 @@ import com.jediterm.core.typeahead.TerminalTypeAheadManager
|
||||
import com.jediterm.core.util.TermSize
|
||||
import com.jediterm.terminal.TerminalExecutorServiceManager
|
||||
import com.jediterm.terminal.TerminalStarter
|
||||
import com.jediterm.terminal.TtyBasedArrayDataStream
|
||||
import com.jediterm.terminal.TtyConnector
|
||||
import com.jediterm.terminal.model.JediTermTypeAheadModel
|
||||
import com.jediterm.terminal.model.StyleState
|
||||
@@ -23,7 +24,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.flow.asSharedFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import org.jetbrains.plugins.terminal.FusAwareTtyBasedDataStream
|
||||
import org.jetbrains.plugins.terminal.LocalBlockTerminalRunner
|
||||
import org.jetbrains.plugins.terminal.ShellStartupOptions
|
||||
import org.jetbrains.plugins.terminal.fus.BackendOutputActivity
|
||||
@@ -115,7 +115,7 @@ private fun createJediTermServices(
|
||||
val terminalStarter = StopAwareTerminalStarter(
|
||||
controller,
|
||||
connector,
|
||||
FusAwareTtyBasedDataStream(connector, fusActivity),
|
||||
enableFus(TtyBasedArrayDataStream(connector), fusActivity),
|
||||
typeAheadManager,
|
||||
executorService,
|
||||
fusActivity
|
||||
|
||||
+35
@@ -5,6 +5,8 @@ import com.intellij.platform.rpc.UID
|
||||
import com.intellij.terminal.session.TerminalContentUpdatedEvent
|
||||
import com.intellij.terminal.session.TerminalWriteBytesEvent
|
||||
import com.jediterm.core.util.TermSize
|
||||
import com.jediterm.terminal.TerminalDataStream
|
||||
import com.jediterm.terminal.TtyBasedArrayDataStream
|
||||
import com.jediterm.terminal.TtyConnector
|
||||
import fleet.multiplatform.shims.ConcurrentHashMap
|
||||
import org.jetbrains.plugins.terminal.fus.BackendLatencyService
|
||||
@@ -38,6 +40,9 @@ internal class BackendLatencyServiceImpl : BackendLatencyService {
|
||||
internal fun enableFus(ttyConnector: TtyConnector, fusActivity: BackendOutputActivity): TtyConnector =
|
||||
FusAwareTtyConnector(ttyConnector, fusActivity)
|
||||
|
||||
internal fun enableFus(stream: TerminalDataStream, fusActivity: BackendOutputActivity): TerminalDataStream =
|
||||
FusAwareTtyBasedDataStream(stream, fusActivity)
|
||||
|
||||
private val backendTypingActivityByByteArray = ConcurrentHashMap<ByteArray, BackendTypingActivityImpl>()
|
||||
|
||||
private class BackendTypingActivityImpl(override val id: Int, private val bytes: ByteArray) : BackendTypingActivity {
|
||||
@@ -334,6 +339,36 @@ private class IdentityWrapper<T : Any>(private val instance: T) {
|
||||
override fun hashCode(): Int = System.identityHashCode(instance)
|
||||
}
|
||||
|
||||
private class FusAwareTtyBasedDataStream(
|
||||
private val original: TerminalDataStream,
|
||||
private val fusActivity: BackendOutputActivity,
|
||||
) : TerminalDataStream {
|
||||
override fun getChar(): Char {
|
||||
@Suppress("UsePropertyAccessSyntax")
|
||||
val result = original.getChar()
|
||||
fusActivity.charsProcessed(1)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun pushChar(c: Char) {
|
||||
fusActivity.charsProcessed(-1)
|
||||
original.pushChar(c)
|
||||
}
|
||||
|
||||
override fun readNonControlCharacters(maxChars: Int): String? {
|
||||
val result = original.readNonControlCharacters(maxChars)
|
||||
fusActivity.charsProcessed(result.length)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun pushBackBuffer(bytes: CharArray, length: Int) {
|
||||
fusActivity.charsProcessed(-length)
|
||||
original.pushBackBuffer(bytes, length)
|
||||
}
|
||||
|
||||
override fun isEmpty(): Boolean = original.isEmpty
|
||||
}
|
||||
|
||||
private fun <T : Any> T.toIdentity(): IdentityWrapper<T> = IdentityWrapper(this)
|
||||
|
||||
private val LOG = logger<BackendLatencyService>()
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.plugins.terminal
|
||||
|
||||
import com.jediterm.terminal.TtyBasedArrayDataStream
|
||||
import com.jediterm.terminal.TtyConnector
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.plugins.terminal.fus.BackendOutputActivity
|
||||
|
||||
@ApiStatus.Internal
|
||||
class FusAwareTtyBasedDataStream(
|
||||
connector: TtyConnector,
|
||||
private val fusActivity: BackendOutputActivity,
|
||||
) : TtyBasedArrayDataStream(connector) {
|
||||
|
||||
override fun getChar(): Char {
|
||||
val result = super.getChar()
|
||||
fusActivity.charsProcessed(1)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun readNonControlCharacters(maxChars: Int): String {
|
||||
val result = super.readNonControlCharacters(maxChars)
|
||||
fusActivity.charsProcessed(result.length)
|
||||
return result
|
||||
}
|
||||
|
||||
override fun pushChar(c: Char) {
|
||||
fusActivity.charsProcessed(-1)
|
||||
super.pushChar(c)
|
||||
}
|
||||
|
||||
override fun pushBackBuffer(bytes: CharArray, length: Int) {
|
||||
fusActivity.charsProcessed(-length)
|
||||
super.pushBackBuffer(bytes, length)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user