diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt index 9a17e2765f8..0390151e0cb 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/JvmCliScriptEvaluationExtension.kt @@ -23,7 +23,7 @@ class JvmCliScriptEvaluationExtension : AbstractScriptEvaluationExtension() { override fun ScriptEvaluationConfiguration.Builder.platformEvaluationConfiguration() { jvm { - baseClassLoader(null) + baseClassLoader(getPlatformClassLoader()) } } @@ -50,3 +50,9 @@ class JvmCliScriptEvaluationExtension : AbstractScriptEvaluationExtension() { arguments is K2JVMCompilerArguments && (arguments.script || arguments.expression != null) } +private fun getPlatformClassLoader(): ClassLoader? = + try { + ClassLoader::class.java.getDeclaredMethod("getPlatformClassLoader")?.invoke(null)?.let { it as? ClassLoader } + } catch (_: Exception) { + null + } diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithCliCompilerTest.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithCliCompilerTest.kt index a87f719d10d..04a4f1a91b1 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithCliCompilerTest.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingWithCliCompilerTest.kt @@ -71,6 +71,19 @@ class ScriptingWithCliCompilerTest { ) } + @Test + fun testJdkModules() { + // actually tests anything on JDKs 9+, on pre-9 it always works because JDK is not modularized anyway + runWithKotlinc( + arrayOf( + "-Xadd-modules=java.sql", + "-expression", + "println(javax.sql.DataSource::class.java)" + ), + listOf("interface javax.sql.DataSource") + ) + } + private fun getMainKtsClassPath(): List { return listOf( File("dist/kotlinc/lib/kotlin-main-kts.jar").also { diff --git a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt index 2087b02d74b..bd196ca0f27 100644 --- a/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt +++ b/plugins/scripting/scripting-compiler/tests/org/jetbrains/kotlin/scripting/compiler/plugin/testUtil.kt @@ -26,6 +26,20 @@ fun runWithKotlinc( workDirectory: File? = null, classpath: List = emptyList(), additionalEnvVars: Iterable>? = null +) { + runWithKotlinc( + arrayOf("-script", scriptPath), + expectedOutPatterns, expectedExitCode, workDirectory, classpath, additionalEnvVars + ) +} + +fun runWithKotlinc( + compilerArgs: Array, + expectedOutPatterns: List = emptyList(), + expectedExitCode: Int = 0, + workDirectory: File? = null, + classpath: List = emptyList(), + additionalEnvVars: Iterable>? = null ) { val executableName = "kotlinc" // TODO: @@ -39,8 +53,7 @@ fun runWithKotlinc( add("-cp") add(classpath.joinToString(File.pathSeparator)) } - add("-script") - add(scriptPath) + addAll(compilerArgs) } val processBuilder = ProcessBuilder(args) if (workDirectory != null) {