[cli-repl] Optimize System.in to send "change indicator" message only when readLine is called
This commit is contained in:
committed by
Pavel V. Talanov
parent
1f4fab0047
commit
3f44fe5955
+10
-10
@@ -25,30 +25,30 @@ public class ReplSystemInWrapper(
|
||||
) : InputStream() {
|
||||
private var isXmlIncomplete = true
|
||||
private var isLastScriptByteProcessed = false
|
||||
private var isReadLineStartSent = false
|
||||
private var byteBuilder = ByteArrayOutputStream()
|
||||
private var curBytePos = 0
|
||||
private var inputByteArray = byteArrayOf()
|
||||
|
||||
private val isReachBufferEnd: Boolean
|
||||
private val isAtBufferEnd: Boolean
|
||||
get() = curBytePos == inputByteArray.size()
|
||||
|
||||
var isReplScriptExecuting = false
|
||||
set(value) {
|
||||
if (value)
|
||||
replWriter.printlnReadLineStart()
|
||||
else
|
||||
replWriter.printlnReadLineEnd()
|
||||
|
||||
$isReplScriptExecuting = value
|
||||
}
|
||||
|
||||
override fun read(): Int {
|
||||
if (isLastScriptByteProcessed && isReplScriptExecuting) {
|
||||
isLastScriptByteProcessed = false
|
||||
isReadLineStartSent = false
|
||||
replWriter.printlnReadLineEnd()
|
||||
return -1
|
||||
}
|
||||
|
||||
while (isXmlIncomplete) {
|
||||
if (isReplScriptExecuting && !isReadLineStartSent) {
|
||||
replWriter.printlnReadLineStart()
|
||||
isReadLineStartSent = true
|
||||
}
|
||||
|
||||
byteBuilder.write(stdin.read())
|
||||
|
||||
if (byteBuilder.toString().endsWith(END_LINE)) {
|
||||
@@ -77,7 +77,7 @@ public class ReplSystemInWrapper(
|
||||
}
|
||||
|
||||
private fun resetBufferIfNeeded() {
|
||||
if (isReachBufferEnd) {
|
||||
if (isAtBufferEnd) {
|
||||
isXmlIncomplete = true
|
||||
byteBuilder = ByteArrayOutputStream()
|
||||
curBytePos = 0
|
||||
|
||||
@@ -18,14 +18,25 @@ package org.jetbrains.kotlin.console
|
||||
|
||||
import com.intellij.execution.Executor
|
||||
import com.intellij.execution.configurations.GeneralCommandLine
|
||||
import com.intellij.execution.console.*
|
||||
import com.intellij.execution.process.*
|
||||
import com.intellij.execution.console.ConsoleExecuteAction
|
||||
import com.intellij.execution.console.LanguageConsoleBuilder
|
||||
import com.intellij.execution.console.LanguageConsoleView
|
||||
import com.intellij.execution.console.ProcessBackedConsoleExecuteActionHandler
|
||||
import com.intellij.execution.process.OSProcessHandler
|
||||
import com.intellij.execution.process.ProcessAdapter
|
||||
import com.intellij.execution.process.ProcessEvent
|
||||
import com.intellij.execution.runners.AbstractConsoleRunnerWithHistory
|
||||
import com.intellij.execution.ui.RunContentDescriptor
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.CommonShortcuts
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
import com.intellij.openapi.editor.colors.EditorColors
|
||||
import com.intellij.openapi.editor.ex.EditorEx
|
||||
import com.intellij.openapi.editor.markup.*
|
||||
import com.intellij.openapi.editor.markup.HighlighterLayer
|
||||
import com.intellij.openapi.editor.markup.HighlighterTargetArea
|
||||
import com.intellij.openapi.editor.markup.RangeHighlighter
|
||||
import com.intellij.openapi.editor.markup.TextAttributes
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Disposer
|
||||
@@ -172,7 +183,7 @@ public class KotlinConsoleRunner(
|
||||
return indicatorHighlighter apply { gutterIconRenderer = indicator }
|
||||
}
|
||||
|
||||
fun changeConsoleEditorIndicator(newIconWithTooltip: IconWithTooltip) {
|
||||
fun changeConsoleEditorIndicator(newIconWithTooltip: IconWithTooltip) = WriteCommandAction.runWriteCommandAction(project) {
|
||||
consoleEditorHighlighter.gutterIconRenderer = KotlinConsoleIndicatorRenderer(newIconWithTooltip)
|
||||
}
|
||||
|
||||
|
||||
+4
-7
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.console.highlight
|
||||
|
||||
import com.intellij.execution.console.LanguageConsoleImpl
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
import com.intellij.openapi.editor.ex.EditorEx
|
||||
import com.intellij.openapi.editor.ex.util.EditorUtil
|
||||
import com.intellij.openapi.editor.markup.HighlighterLayer
|
||||
@@ -32,12 +31,10 @@ public class KotlinHistoryHighlighter(private val runner: KotlinConsoleRunner )
|
||||
|
||||
var isReadLineMode: Boolean = false
|
||||
set(value) {
|
||||
WriteCommandAction.runWriteCommandAction(runner.project) {
|
||||
if (value)
|
||||
runner.changeConsoleEditorIndicator(ReplIcons.EDITOR_READLINE_INDICATOR)
|
||||
else
|
||||
runner.changeConsoleEditorIndicator(ReplIcons.EDITOR_INDICATOR)
|
||||
}
|
||||
if (value)
|
||||
runner.changeConsoleEditorIndicator(ReplIcons.EDITOR_READLINE_INDICATOR)
|
||||
else
|
||||
runner.changeConsoleEditorIndicator(ReplIcons.EDITOR_INDICATOR)
|
||||
|
||||
$isReadLineMode = value
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user