From 96dda8de6baf0c33d7fb76f39d03af42618326ac Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 1 Dec 2017 18:35:30 +0300 Subject: [PATCH] REPL, Refactoring: Make ReplFromTerminal and ReplInterpreter not to implement ReplConfiguration --- .../kotlin/cli/jvm/repl/ReplFromTerminal.kt | 25 +++++++++++-------- .../kotlin/cli/jvm/repl/ReplInterpreter.kt | 7 +++--- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplFromTerminal.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplFromTerminal.kt index d50c5f70929..e321cce7d27 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplFromTerminal.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplFromTerminal.kt @@ -20,7 +20,6 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector -import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.repl.ReplEvalResult import org.jetbrains.kotlin.cli.jvm.repl.messages.unescapeLineBreaks import org.jetbrains.kotlin.config.CompilerConfiguration @@ -36,8 +35,8 @@ import java.util.concurrent.Future class ReplFromTerminal( disposable: Disposable, compilerConfiguration: CompilerConfiguration, - replConfiguration: ReplConfiguration -) : ReplConfiguration by replConfiguration { + private val replConfiguration: ReplConfiguration +) { private val replInitializer: Future = Executors.newSingleThreadExecutor().submit(Callable { ReplInterpreter(disposable, compilerConfiguration, replConfiguration) }) @@ -45,13 +44,17 @@ class ReplFromTerminal( private val replInterpreter: ReplInterpreter get() = replInitializer.get() - private val messageCollector: MessageCollector = compilerConfiguration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) + private val writer get() = replConfiguration.writer + + private val messageCollector = compilerConfiguration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) private fun doRun() { try { - writer.printlnWelcomeMessage("Welcome to Kotlin version ${KotlinCompilerVersion.VERSION} " + - "(JRE ${System.getProperty("java.runtime.version")})") - writer.printlnWelcomeMessage("Type :help for help, :quit for quit") + with (writer) { + printlnWelcomeMessage("Welcome to Kotlin version ${KotlinCompilerVersion.VERSION} " + + "(JRE ${System.getProperty("java.runtime.version")})") + printlnWelcomeMessage("Type :help for help, :quit for quit") + } // Display compiler messages related to configuration and CLI arguments, quit if there are errors val hasErrors = messageCollector.hasErrors() @@ -67,15 +70,15 @@ class ReplFromTerminal( } } catch (e: Exception) { - exceptionReporter.report(e) + replConfiguration.exceptionReporter.report(e) throw e } finally { try { - commandReader.flushHistory() + replConfiguration.commandReader.flushHistory() } catch (e: Exception) { - exceptionReporter.report(e) + replConfiguration.exceptionReporter.report(e) throw e } @@ -89,7 +92,7 @@ class ReplFromTerminal( } private fun one(next: WhatNextAfterOneLine): WhatNextAfterOneLine { - var line = commandReader.readLine(next) ?: return WhatNextAfterOneLine.QUIT + var line = replConfiguration.commandReader.readLine(next) ?: return WhatNextAfterOneLine.QUIT line = unescapeLineBreaks(line) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt index 806c66c0cad..40069845b06 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplInterpreter.kt @@ -35,8 +35,7 @@ class ReplInterpreter( disposable: Disposable, private val configuration: CompilerConfiguration, private val replConfiguration: ReplConfiguration -): ReplConfiguration by replConfiguration { - +) { private val lineNumber = AtomicInteger() private val previousIncompleteLines = arrayListOf() @@ -92,12 +91,12 @@ class ReplInterpreter( try { val evalRes = scriptEvaluator.compileAndEval(evalState, ReplCodeLine(lineNumber.getAndIncrement(), 0, fullText), null, object : InvokeWrapper { - override fun invoke(body: () -> T): T = executionInterceptor.execute(body) + override fun invoke(body: () -> T): T = replConfiguration.executionInterceptor.execute(body) }) when { evalRes !is ReplEvalResult.Incomplete -> previousIncompleteLines.clear() - allowIncompleteLines -> previousIncompleteLines.add(line) + replConfiguration.allowIncompleteLines -> previousIncompleteLines.add(line) else -> return ReplEvalResult.Error.CompileTime("incomplete code") } return evalRes