Skip metadata version check in repl, improve JSR 223 template compatibility
This commit is contained in:
+3
@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.repl.GenericReplCompiler
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
|
||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
@@ -71,5 +73,6 @@ class KotlinJsr223JvmLocalScriptEngine(
|
||||
addJvmClasspathRoots(PathUtil.getJdkClassesRoots())
|
||||
addJvmClasspathRoots(templateClasspath)
|
||||
put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script")
|
||||
put(CommonConfigurationKeys.SKIP_METADATA_VERSION_CHECK, true)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -77,6 +77,7 @@ private fun contextClasspath(keyName: String, classLoader: ClassLoader): List<Fi
|
||||
?: manifestClassPath(classLoader)?.anyOrNull { it.matchMaybeVersionedFile(keyName) }
|
||||
)?.toList()
|
||||
|
||||
private val validJarExtensions = setOf("jar", "zip")
|
||||
|
||||
private fun scriptCompilationClasspathFromContext(keyName: String, classLoader: ClassLoader = Thread.currentThread().contextClassLoader): List<File> =
|
||||
(System.getProperty("kotlin.script.classpath")?.split(File.pathSeparator)?.map(::File)
|
||||
@@ -84,9 +85,9 @@ private fun scriptCompilationClasspathFromContext(keyName: String, classLoader:
|
||||
).let {
|
||||
it?.plus(kotlinScriptStandardJars) ?: kotlinScriptStandardJars
|
||||
}
|
||||
.map { it?.canonicalFile }
|
||||
.mapNotNull { it?.canonicalFile }
|
||||
.distinct()
|
||||
.mapNotNull { it?.existsOrNull() }
|
||||
.filter { (it.isDirectory || (it.isFile && it.extension.toLowerCase() in validJarExtensions)) && it.exists() }
|
||||
|
||||
private val kotlinCompilerJar: File by lazy {
|
||||
// highest prio - explicit property
|
||||
|
||||
+6
-5
@@ -5,10 +5,11 @@ import org.jetbrains.kotlin.cli.common.repl.KOTLIN_SCRIPT_STATE_BINDINGS_KEY
|
||||
import org.jetbrains.kotlin.script.ScriptTemplateDefinition
|
||||
import javax.script.Bindings
|
||||
import javax.script.ScriptEngine
|
||||
import kotlin.script.templates.standard.ScriptTemplateWithBindings
|
||||
|
||||
@Suppress("unused")
|
||||
@ScriptTemplateDefinition
|
||||
abstract class KotlinStandardJsr223ScriptTemplate(val bindings: Bindings) {
|
||||
abstract class KotlinStandardJsr223ScriptTemplate(val jsr223Bindings: Bindings) : ScriptTemplateWithBindings(jsr223Bindings) {
|
||||
|
||||
private val myEngine: ScriptEngine? get() = bindings[KOTLIN_SCRIPT_ENGINE_BINDINGS_KEY]?.let { it as? ScriptEngine }
|
||||
|
||||
@@ -17,7 +18,7 @@ abstract class KotlinStandardJsr223ScriptTemplate(val bindings: Bindings) {
|
||||
|
||||
fun eval(script: String, newBindings: Bindings): Any? =
|
||||
withMyEngine {
|
||||
val savedState = newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY]?.takeIf { it === this.bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] }?.apply {
|
||||
val savedState = newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY]?.takeIf { it === this.jsr223Bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] }?.apply {
|
||||
newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = null
|
||||
}
|
||||
val res = it.eval(script, newBindings)
|
||||
@@ -29,10 +30,10 @@ abstract class KotlinStandardJsr223ScriptTemplate(val bindings: Bindings) {
|
||||
|
||||
fun eval(script: String): Any? =
|
||||
withMyEngine {
|
||||
val savedState = bindings.remove(KOTLIN_SCRIPT_STATE_BINDINGS_KEY)
|
||||
val res = it.eval(script, bindings)
|
||||
val savedState = jsr223Bindings.remove(KOTLIN_SCRIPT_STATE_BINDINGS_KEY)
|
||||
val res = it.eval(script, jsr223Bindings)
|
||||
savedState?.apply {
|
||||
bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = savedState
|
||||
jsr223Bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = savedState
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user