Fix classpath calculation for scripts, e.g. in JSR-223 setting
#KT-25814 fixed
This commit is contained in:
+2
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.jsr223
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineFactoryBase
|
import org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineFactoryBase
|
||||||
import org.jetbrains.kotlin.cli.common.repl.ScriptArgsWithTypes
|
import org.jetbrains.kotlin.cli.common.repl.ScriptArgsWithTypes
|
||||||
|
import org.jetbrains.kotlin.script.util.KotlinJars
|
||||||
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContextOrStlib
|
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContextOrStlib
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
import javax.script.ScriptContext
|
import javax.script.ScriptContext
|
||||||
@@ -29,7 +30,7 @@ class KotlinJsr223StandardScriptEngineFactory4Idea : KotlinJsr223JvmScriptEngine
|
|||||||
override fun getScriptEngine(): ScriptEngine =
|
override fun getScriptEngine(): ScriptEngine =
|
||||||
KotlinJsr223JvmScriptEngine4Idea(
|
KotlinJsr223JvmScriptEngine4Idea(
|
||||||
this,
|
this,
|
||||||
scriptCompilationClasspathFromContextOrStlib(PathUtil.KOTLIN_JAVA_SCRIPT_RUNTIME_JAR, wholeClasspath = true),
|
scriptCompilationClasspathFromContextOrStlib(wholeClasspath = true) + KotlinJars.kotlinScriptStandardJars,
|
||||||
"kotlin.script.templates.standard.ScriptTemplateWithBindings",
|
"kotlin.script.templates.standard.ScriptTemplateWithBindings",
|
||||||
{ ctx, argTypes -> ScriptArgsWithTypes(arrayOf(ctx.getBindings(ScriptContext.ENGINE_SCOPE)), argTypes ?: emptyArray()) },
|
{ ctx, argTypes -> ScriptArgsWithTypes(arrayOf(ctx.getBindings(ScriptContext.ENGINE_SCOPE)), argTypes ?: emptyArray()) },
|
||||||
arrayOf(Map::class)
|
arrayOf(Map::class)
|
||||||
|
|||||||
+7
-3
@@ -94,10 +94,14 @@ fun scriptCompilationClasspathFromContextOrNull(
|
|||||||
classLoader: ClassLoader = Thread.currentThread().contextClassLoader,
|
classLoader: ClassLoader = Thread.currentThread().contextClassLoader,
|
||||||
wholeClasspath: Boolean = false
|
wholeClasspath: Boolean = false
|
||||||
): List<File>? {
|
): List<File>? {
|
||||||
fun List<File>.takeAndFilter() = if (wholeClasspath) takeIfContainsAll(*keyNames) else filterIfContainsAll(*keyNames)
|
fun List<File>.takeAndFilter() = when {
|
||||||
|
isEmpty() -> null
|
||||||
|
wholeClasspath -> takeIfContainsAll(*keyNames)
|
||||||
|
else -> filterIfContainsAll(*keyNames)
|
||||||
|
}
|
||||||
return System.getProperty(KOTLIN_SCRIPT_CLASSPATH_PROPERTY)?.split(File.pathSeparator)?.map(::File)
|
return System.getProperty(KOTLIN_SCRIPT_CLASSPATH_PROPERTY)?.split(File.pathSeparator)?.map(::File)
|
||||||
?: classpathFromClassloader(classLoader)?.takeAndFilter()
|
?: classpathFromClassloader(classLoader)?.takeAndFilter()
|
||||||
?: classpathFromClasspathProperty()?.takeAndFilter()
|
?: classpathFromClasspathProperty()?.takeAndFilter()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun scriptCompilationClasspathFromContextOrStlib(
|
fun scriptCompilationClasspathFromContextOrStlib(
|
||||||
|
|||||||
Reference in New Issue
Block a user