Avoid using reflected types in the scripting API
since it causes numerous classloading issues. Using the wrapping types and reload them in the proper context when needed. Note: this version supports only classes, but the wrapping type could be extended to support other types in the future. + numerous fixes related to proper loading and handling of the templates.
This commit is contained in:
@@ -235,9 +235,11 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
||||
if (!explicitOrLoadedScriptingPlugin) {
|
||||
val libPath = paths?.libPath?.takeIf { it.exists() } ?: File(".")
|
||||
with(PathUtil) {
|
||||
val jars = arrayOf(KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR, KOTLIN_SCRIPTING_COMMON_JAR, KOTLIN_SCRIPTING_JVM_JAR)
|
||||
.mapNotNull { File(libPath, it).takeIf { it.exists() }?.canonicalPath }
|
||||
if (jars.size == 3) {
|
||||
val jars = arrayOf(
|
||||
KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR, KOTLIN_SCRIPTING_COMMON_JAR,
|
||||
KOTLIN_SCRIPTING_JVM_JAR, KOTLIN_SCRIPTING_MISC_JAR
|
||||
).mapNotNull { File(libPath, it).takeIf { it.exists() }?.canonicalPath }
|
||||
if (jars.size == 4) {
|
||||
pluginClasspaths = jars + pluginClasspaths
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.compiler.plugin.*
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
import java.net.URLClassLoader
|
||||
import java.util.*
|
||||
|
||||
object PluginCliParser {
|
||||
|
||||
@@ -15,9 +15,9 @@ import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import org.junit.Assert
|
||||
import java.io.File
|
||||
import kotlin.reflect.full.starProjectedType
|
||||
import kotlin.script.experimental.annotations.KotlinScript
|
||||
import kotlin.script.experimental.annotations.KotlinScriptDefaultCompilationConfiguration
|
||||
import kotlin.script.experimental.api.KotlinType
|
||||
import kotlin.script.experimental.api.ScriptCompileConfigurationProperties
|
||||
import kotlin.script.experimental.util.TypedKey
|
||||
|
||||
@@ -32,7 +32,7 @@ abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() {
|
||||
|
||||
override fun updateConfiguration(configuration: CompilerConfiguration) {
|
||||
if (scriptDefinitions.isNotEmpty()) {
|
||||
configureScriptDefinitions(scriptDefinitions, configuration, MessageCollector.NONE, emptyMap())
|
||||
configureScriptDefinitions(scriptDefinitions, configuration, this::class.java.classLoader, MessageCollector.NONE, emptyMap())
|
||||
}
|
||||
|
||||
configuration.addJvmClasspathRoots(additionalDependencies.orEmpty())
|
||||
@@ -116,7 +116,7 @@ abstract class AbstractCustomScriptCodegenTest : CodegenTestCase() {
|
||||
|
||||
object TestScriptWithReceiversConfiguration : ArrayList<Pair<TypedKey<*>, Any?>>(
|
||||
listOf(
|
||||
ScriptCompileConfigurationProperties.scriptImplicitReceivers to listOf(String::class.starProjectedType)
|
||||
ScriptCompileConfigurationProperties.scriptImplicitReceivers to listOf(KotlinType(String::class))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -127,7 +127,7 @@ abstract class TestScriptWithReceivers
|
||||
|
||||
object TestScriptWithSimpleEnvVarsConfiguration : ArrayList<Pair<TypedKey<*>, Any?>>(
|
||||
listOf(
|
||||
ScriptCompileConfigurationProperties.contextVariables to mapOf("stringVar1" to String::class.starProjectedType)
|
||||
ScriptCompileConfigurationProperties.contextVariables to mapOf("stringVar1" to KotlinType(String::class))
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.cli.AbstractCliTest
|
||||
import org.jetbrains.kotlin.codegen.*
|
||||
import org.jetbrains.kotlin.codegen.defaultConstructor.AbstractDefaultArgumentsReflectionTest
|
||||
import org.jetbrains.kotlin.codegen.flags.AbstractWriteFlagsTest
|
||||
import org.jetbrains.kotlin.codegen.AbstractCustomScriptCodegenTest
|
||||
import org.jetbrains.kotlin.codegen.ir.AbstractIrBlackBoxCodegenTest
|
||||
import org.jetbrains.kotlin.codegen.ir.AbstractIrBlackBoxInlineCodegenTest
|
||||
import org.jetbrains.kotlin.codegen.ir.AbstractIrCompileKotlinAgainstInlineKotlinTest
|
||||
|
||||
@@ -59,6 +59,7 @@ object PathUtil {
|
||||
const val KOTLIN_JAVA_SCRIPT_RUNTIME_JAR = "kotlin-script-runtime.jar"
|
||||
const val KOTLIN_SCRIPTING_COMMON_JAR = "kotlin-scripting-common.jar"
|
||||
const val KOTLIN_SCRIPTING_JVM_JAR = "kotlin-scripting-jvm.jar"
|
||||
const val KOTLIN_SCRIPTING_MISC_JAR = "kotlin-scripting-misc.jar"
|
||||
const val KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR = "kotlin-scripting-compiler.jar"
|
||||
|
||||
const val KOTLIN_TEST_NAME = "kotlin-test"
|
||||
|
||||
Reference in New Issue
Block a user