Reuse script args substitution for replacing bindings in JSR 223 sample engines, fixes KT-15450

This commit is contained in:
Ilya Chernikov
2017-01-25 23:52:17 +01:00
parent b86ed0c5d9
commit b8b044c6b0
6 changed files with 69 additions and 17 deletions
@@ -36,8 +36,8 @@ class KotlinJsr223JvmDaemonCompileScriptEngine(
compilerJar: File,
templateClasspath: List<File>,
templateClassName: String,
getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
scriptArgsTypes: Array<out KClass<out Any>>?,
val getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
val scriptArgsTypes: Array<out KClass<out Any>>?,
compilerOut: OutputStream = System.err
) : KotlinJsr223JvmScriptEngineBase(factory), KotlinJsr223JvmInvocableScriptEngine {
@@ -61,6 +61,8 @@ class KotlinJsr223JvmDaemonCompileScriptEngine(
override val replScriptEvaluator: ReplFullEvaluator get() = localEvaluator
override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes)
private fun connectToCompileService(compilerJar: File): CompileService {
val compilerId = CompilerId.makeCompilerId(compilerJar)
val daemonOptions = configureDaemonOptions()
@@ -38,8 +38,8 @@ class KotlinJsr223JvmLocalScriptEngine(
factory: ScriptEngineFactory,
val templateClasspath: List<File>,
templateClassName: String,
getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
scriptArgsTypes: Array<out KClass<out Any>>?
val getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
val scriptArgsTypes: Array<out KClass<out Any>>?
) : KotlinJsr223JvmScriptEngineBase(factory), KotlinJsr223JvmInvocableScriptEngine {
override val replCompiler: ReplCompiler by lazy {
@@ -54,6 +54,8 @@ class KotlinJsr223JvmLocalScriptEngine(
override val replScriptEvaluator: ReplFullEvaluator get() = localEvaluator
override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes)
private fun makeScriptDefinition(templateClasspath: List<File>, templateClassName: String): KotlinScriptDefinition {
val classloader = URLClassLoader(templateClasspath.map { it.toURI().toURL() }.toTypedArray(), this.javaClass.classLoader)
val cls = classloader.loadClass(templateClassName)