From 1d299130bc526181b8c46d906cb6023f53b0024d Mon Sep 17 00:00:00 2001 From: Sheunesu Gumbie Date: Tue, 10 Jan 2023 01:41:08 +0200 Subject: [PATCH] Explicitly set the JVM target --- .../kotlin/component/KotlinEnvironment.kt | 11 +++++++--- .../com/compiler/server/JvmRunnerTest.kt | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/common/src/main/kotlin/component/KotlinEnvironment.kt b/common/src/main/kotlin/component/KotlinEnvironment.kt index ce1072a3a..19fd78b69 100644 --- a/common/src/main/kotlin/component/KotlinEnvironment.kt +++ b/common/src/main/kotlin/component/KotlinEnvironment.kt @@ -14,9 +14,11 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots import org.jetbrains.kotlin.cli.jvm.configureAdvancedJvmOptions +import org.jetbrains.kotlin.cli.jvm.setupJvmSpecificArguments import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.ir.backend.js.jsPhases import org.jetbrains.kotlin.js.config.JSConfigurationKeys @@ -28,7 +30,8 @@ import java.io.File class KotlinEnvironment( val classpath: List, - additionalJsClasspath: List + additionalJsClasspath: List, + additionalCompilerFlags: List = emptyList() ) { companion object { /** @@ -59,6 +62,7 @@ class KotlinEnvironment( } val JS_LIBRARIES = additionalJsClasspath.map { it.absolutePath } + val additionalCompilerOptions = additionalCompilerFlags + additionalCompilerArguments @Synchronized fun environment(f: (KotlinCoreEnvironment) -> T): T { @@ -96,7 +100,7 @@ class KotlinEnvironment( private fun createConfiguration(): CompilerConfiguration { val arguments = K2JVMCompilerArguments() - parseCommandLineArguments(additionalCompilerArguments, arguments) + parseCommandLineArguments(additionalCompilerOptions, arguments) return CompilerConfiguration().apply { addJvmClasspathRoots(classpath.filter { it.exists() && it.isFile && it.extension == "jar" }) val messageCollector = MessageCollector.NONE @@ -109,9 +113,10 @@ class KotlinEnvironment( // it uses languageVersionSettings that was set above configureAdvancedJvmOptions(arguments) + setupJvmSpecificArguments(arguments) put(JVMConfigurationKeys.DO_NOT_CLEAR_BINDING_CONTEXT, true) configureJdkClasspathRoots() } } -} \ No newline at end of file +} diff --git a/src/test/kotlin/com/compiler/server/JvmRunnerTest.kt b/src/test/kotlin/com/compiler/server/JvmRunnerTest.kt index 0d9da4a88..0542b7086 100644 --- a/src/test/kotlin/com/compiler/server/JvmRunnerTest.kt +++ b/src/test/kotlin/com/compiler/server/JvmRunnerTest.kt @@ -1,10 +1,30 @@ package com.compiler.server import com.compiler.server.base.BaseExecutorTest +import component.KotlinEnvironment +import org.jetbrains.kotlin.config.JVMConfigurationKeys +import org.jetbrains.kotlin.config.JvmTarget +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test class JvmRunnerTest : BaseExecutorTest() { + @Test + fun `jvm test setting java 11`() { + val kv = KotlinEnvironment(emptyList(), emptyList(), listOf("-jvm-target=11")) + kv.environment { + Assertions.assertEquals(JvmTarget.JVM_11, it.configuration.get(JVMConfigurationKeys.JVM_TARGET), "JVM target should be java 11") + } + } + + @Test + fun `jvm test default`() { + val kv = KotlinEnvironment(emptyList(), emptyList(), emptyList()) + kv.environment { + Assertions.assertEquals(null, it.configuration.get(JVMConfigurationKeys.JVM_TARGET), "JVM target is not set") + } + } + @Test fun `base execute test JVM`() { run(