From f313001b2d623df2831fe6d32300a96ee3ca11a1 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 10 Apr 2017 12:24:08 +0300 Subject: [PATCH] Update to jline 3.3.1 and jansi 1.16 Note that the history file name was changed (.kotlin_history -> .kotlinc_history) because the history is now stored in a different (incompatible) format. #KT-11369 Fixed --- .idea/libraries/jline.xml | 4 +-- build.xml | 5 +-- .../jvm/repl/messages/ReplConsoleWriter.kt | 13 +------ .../repl/reader/ConsoleReplCommandReader.kt | 36 +++++++++++++------ compiler/compiler.pro | 2 ++ .../tools/kotlin-compiler-embeddable/pom.xml | 4 +-- update_dependencies.xml | 4 +-- 7 files changed, 38 insertions(+), 30 deletions(-) diff --git a/.idea/libraries/jline.xml b/.idea/libraries/jline.xml index e71d9184d77..473c1e61a55 100644 --- a/.idea/libraries/jline.xml +++ b/.idea/libraries/jline.xml @@ -4,11 +4,11 @@ - + - + \ No newline at end of file diff --git a/build.xml b/build.xml index 5353bbe257d..7f65217c613 100644 --- a/build.xml +++ b/build.xml @@ -61,8 +61,8 @@ + - @@ -400,7 +400,8 @@ - + + diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/messages/ReplConsoleWriter.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/messages/ReplConsoleWriter.kt index 1ec366bcd9c..c8f89446ffa 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/messages/ReplConsoleWriter.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/messages/ReplConsoleWriter.kt @@ -17,17 +17,6 @@ package org.jetbrains.kotlin.cli.jvm.repl.messages class ReplConsoleWriter : ReplWriter { - init { - Runtime.getRuntime().addShutdownHook(object : Thread("Kotlin REPL shutdown hook") { - override fun run() { - // Print an empty line to make the command prompt start from the beginning of the line after REPL exits. - // This is essentially a workaround of a jline2 bug. - // TODO: remove this as soon as we update to jline3 - println() - } - }) - } - override fun printlnWelcomeMessage(x: String) = println(x) override fun printlnHelpMessage(x: String) = println(x) override fun outputCompileError(x: String) = println(x) @@ -39,4 +28,4 @@ class ReplConsoleWriter : ReplWriter { override fun notifyIncomplete() {} override fun notifyCommandSuccess() {} override fun sendInternalErrorReport(x: String) {} -} \ No newline at end of file +} diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/reader/ConsoleReplCommandReader.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/reader/ConsoleReplCommandReader.kt index 09936e3c564..ba8d1a493fe 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/reader/ConsoleReplCommandReader.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/reader/ConsoleReplCommandReader.kt @@ -16,22 +16,38 @@ package org.jetbrains.kotlin.cli.jvm.repl.reader -import jline.console.ConsoleReader -import jline.console.history.FileHistory import org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal +import org.jline.reader.EndOfFileException +import org.jline.reader.LineReader +import org.jline.reader.LineReaderBuilder +import org.jline.reader.UserInterruptException +import org.jline.terminal.TerminalBuilder import java.io.File class ConsoleReplCommandReader : ReplCommandReader { - private val consoleReader = ConsoleReader("kotlin", System.`in`, System.`out`, null).apply { - isHistoryEnabled = true - expandEvents = false - history = FileHistory(File(File(System.getProperty("user.home")), ".kotlin_history")) - } + private val lineReader = LineReaderBuilder.builder() + .appName("kotlin") + .terminal(TerminalBuilder.terminal()) + .variable(LineReader.HISTORY_FILE, File(File(System.getProperty("user.home")), ".kotlinc_history").absolutePath) + .build() + .apply { + setOpt(LineReader.Option.DISABLE_EVENT_EXPANSION) + } override fun readLine(next: ReplFromTerminal.WhatNextAfterOneLine): String? { val prompt = if (next == ReplFromTerminal.WhatNextAfterOneLine.INCOMPLETE) "... " else ">>> " - return consoleReader.readLine(prompt) + try { + return lineReader.readLine(prompt) + } + catch (e: UserInterruptException) { + println("") + System.out.flush() + return "" + } + catch (e: EndOfFileException) { + return null + } } - override fun flushHistory() = (consoleReader.history as FileHistory).flush() -} \ No newline at end of file + override fun flushHistory() = lineReader.history.save() +} diff --git a/compiler/compiler.pro b/compiler/compiler.pro index 9ad65a1d1bc..24f22e0ec58 100644 --- a/compiler/compiler.pro +++ b/compiler/compiler.pro @@ -15,6 +15,7 @@ !org/apache/log4j/net/SMTP*, !org/apache/log4j/or/jms/MessageRenderer*, !org/jdom/xpath/Jaxen*, +!org/jline/builtins/ssh/**, !org/mozilla/javascript/xml/impl/xmlbeans/**, !net/sf/cglib/**, !META-INF/maven**, @@ -51,6 +52,7 @@ messages/**) -dontwarn org.w3c.dom.ElementTraversal -dontwarn javaslang.match.annotation.Unapply -dontwarn javaslang.match.annotation.Patterns +-dontwarn org.jline.builtins.Nano$Buffer -libraryjars '' -libraryjars '' diff --git a/libraries/tools/kotlin-compiler-embeddable/pom.xml b/libraries/tools/kotlin-compiler-embeddable/pom.xml index 8424dfe87fa..2d9f2c102f7 100644 --- a/libraries/tools/kotlin-compiler-embeddable/pom.xml +++ b/libraries/tools/kotlin-compiler-embeddable/pom.xml @@ -113,8 +113,8 @@ ${kotlin.relocated.package}.org.picocontainer - jline - ${kotlin.relocated.package}.jline + org.jline + ${kotlin.relocated.package}.org.jline gnu diff --git a/update_dependencies.xml b/update_dependencies.xml index 1e9a5add14e..5bbd517ef53 100644 --- a/update_dependencies.xml +++ b/update_dependencies.xml @@ -191,10 +191,10 @@ dest="${dependencies}/jflex/idea-flex.skeleton" usetimestamp="true"/> - + - +