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"/>
-
+
-
+