From b9469a930810072c7f370715f322b64513e94c77 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Tue, 7 Feb 2017 17:24:21 +0100 Subject: [PATCH] Fix script-util after changes in repl infrastruct --- .../repl/KotlinJsr223JvmScriptEngineBase.kt | 2 +- .../KotlinJsr223JvmDaemonCompileScriptEngine.kt | 15 +++++++++++---- .../jsr223/KotlinJsr223JvmLocalScriptEngine.kt | 4 +++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/KotlinJsr223JvmScriptEngineBase.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/KotlinJsr223JvmScriptEngineBase.kt index dbf3c7690ba..0405d9000d7 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/KotlinJsr223JvmScriptEngineBase.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/KotlinJsr223JvmScriptEngineBase.kt @@ -46,7 +46,7 @@ abstract class KotlinJsr223JvmScriptEngineBase(protected val myFactory: ScriptEn protected open fun createState(lock: ReentrantReadWriteLock = ReentrantReadWriteLock()): IReplStageState<*> = AggregatedReplStageState(replCompiler.createState(lock), replEvaluator.createState(lock), lock) - private fun getCurrentState(context: ScriptContext) = context.getBindings(ScriptContext.ENGINE_SCOPE).getOrPut(KOTLIN_SCRIPT_STATE_BINDINGS_KEY, { replEvaluator.createState() }) as IReplStageState<*> + protected fun getCurrentState(context: ScriptContext) = context.getBindings(ScriptContext.ENGINE_SCOPE).getOrPut(KOTLIN_SCRIPT_STATE_BINDINGS_KEY, { replEvaluator.createState() }) as IReplStageState<*> open fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = null diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmDaemonCompileScriptEngine.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmDaemonCompileScriptEngine.kt index 2889dd7b274..f6cbab45b11 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmDaemonCompileScriptEngine.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmDaemonCompileScriptEngine.kt @@ -17,14 +17,17 @@ package org.jetbrains.kotlin.script.jsr223 import com.intellij.openapi.Disposable +import org.jetbrains.kotlin.cli.common.messages.MessageRenderer +import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector import org.jetbrains.kotlin.cli.common.repl.* import org.jetbrains.kotlin.daemon.client.DaemonReportMessage import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient -import org.jetbrains.kotlin.daemon.client.KotlinRemoteReplCompiler +import org.jetbrains.kotlin.daemon.client.KotlinRemoteReplCompilerClient import org.jetbrains.kotlin.daemon.common.* import java.io.File import java.io.OutputStream +import java.io.PrintStream import javax.script.ScriptContext import javax.script.ScriptEngineFactory import javax.script.ScriptException @@ -47,20 +50,24 @@ class KotlinJsr223JvmDaemonCompileScriptEngine( override val replCompiler by lazy { daemon.let { - KotlinRemoteReplCompiler( + KotlinRemoteReplCompilerClient( it, makeAutodeletingFlagFile("jsr223-repl-session"), CompileService.TargetPlatform.JVM, + emptyArray(), + PrintingMessageCollector(PrintStream(compilerOut), MessageRenderer.WITHOUT_PATHS, false), templateClasspath, templateClassName, - compilerOut) + getScriptArgs(context, scriptArgsTypes)!!) } } // TODO: bindings passing works only once on the first eval, subsequent setContext/setBindings call have no effect. Consider making it dynamic, but take history into account val localEvaluator by lazy { GenericReplCompilingEvaluator(replCompiler, templateClasspath, Thread.currentThread().contextClassLoader, getScriptArgs(getContext(), scriptArgsTypes)) } - override val replScriptEvaluator: ReplFullEvaluator get() = localEvaluator + override val replEvaluator: ReplFullEvaluator get() = localEvaluator + + override val state: IReplStageState<*> get() = getCurrentState(getContext()) override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes) diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt index 4376cf1fabc..281b5605e85 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt @@ -52,7 +52,9 @@ class KotlinJsr223JvmLocalScriptEngine( // TODO: bindings passing works only once on the first eval, subsequent setContext/setBindings call have no effect. Consider making it dynamic, but take history into account private val localEvaluator by lazy { GenericReplCompilingEvaluator(replCompiler, templateClasspath, Thread.currentThread().contextClassLoader, getScriptArgs(getContext(), scriptArgsTypes)) } - override val replScriptEvaluator: ReplFullEvaluator get() = localEvaluator + override val replEvaluator: ReplFullEvaluator get() = localEvaluator + + override val state: IReplStageState<*> get() = getCurrentState(getContext()) override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes)