diff --git a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/BasicJvmScriptEvaluator.kt b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/BasicJvmScriptEvaluator.kt index 8c8e20d82d4..b58f23e304f 100644 --- a/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/BasicJvmScriptEvaluator.kt +++ b/libraries/scripting/jvm/src/kotlin/script/experimental/jvm/BasicJvmScriptEvaluator.kt @@ -89,7 +89,13 @@ open class BasicJvmScriptEvaluator : ScriptEvaluator { val ctor = java.constructors.single() - return ctor.newInstance(*args.toArray()) + val saveClassLoader = Thread.currentThread().contextClassLoader + Thread.currentThread().contextClassLoader = this.java.classLoader + return try { + ctor.newInstance(*args.toArray()) + } finally { + Thread.currentThread().contextClassLoader = saveClassLoader + } } } diff --git a/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsIT.kt b/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsIT.kt index 3544f196fb2..33794eabde0 100644 --- a/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsIT.kt +++ b/libraries/tools/kotlin-main-kts-test/test/org/jetbrains/kotlin/mainKts/test/mainKtsIT.kt @@ -15,18 +15,30 @@ class MainKtsIT { @Test fun testResolveJunit() { - runWithKotlinc( - "$TEST_DATA_ROOT/hello-resolve-junit.main.kts", listOf("Hello, World!"), - classpath = listOf( - File("dist/kotlinc/lib/kotlin-main-kts.jar").also { - Assert.assertTrue("kotlin-main-kts.jar not found, run dist task: ${it.absolutePath}", it.exists()) - } - ) - ) + runWithKotlincAndMainKts("$TEST_DATA_ROOT/hello-resolve-junit.main.kts", listOf("Hello, World!")) } @Test fun testImport() { runWithK2JVMCompiler("$TEST_DATA_ROOT/import-test.main.kts", listOf("Hi from common", "Hi from middle", "sharedVar == 5")) } + + @Test + fun testThreadContextClassLoader() { + runWithKotlincAndMainKts("$TEST_DATA_ROOT/context-classloader.main.kts", listOf("MainKtsConfigurator")) + } } + +fun runWithKotlincAndMainKts( + scriptPath: String, + expectedOutPatterns: List = emptyList(), + expectedExitCode: Int = 0 +) = runWithKotlinc( + scriptPath, expectedOutPatterns, expectedExitCode, + classpath = listOf( + File("dist/kotlinc/lib/kotlin-main-kts.jar").also { + Assert.assertTrue("kotlin-main-kts.jar not found, run dist task: ${it.absolutePath}", it.exists()) + } + ) +) + diff --git a/libraries/tools/kotlin-main-kts-test/testData/context-classloader.main.kts b/libraries/tools/kotlin-main-kts-test/testData/context-classloader.main.kts new file mode 100644 index 00000000000..2d9961e7fba --- /dev/null +++ b/libraries/tools/kotlin-main-kts-test/testData/context-classloader.main.kts @@ -0,0 +1,4 @@ + +val klass = java.lang.Thread.currentThread().contextClassLoader.loadClass("org.jetbrains.kotlin.mainKts.MainKtsConfigurator") + +println(klass.simpleName) \ No newline at end of file