Fix script compiler options processing
This commit is contained in:
+36
@@ -7,6 +7,9 @@ package kotlin.script.experimental.jvmhost.test
|
|||||||
|
|
||||||
import junit.framework.TestCase
|
import junit.framework.TestCase
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||||
|
import org.jetbrains.org.objectweb.asm.ClassVisitor
|
||||||
|
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.io.*
|
import java.io.*
|
||||||
@@ -25,6 +28,7 @@ import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
|||||||
import kotlin.script.experimental.jvm.impl.KJvmCompiledScript
|
import kotlin.script.experimental.jvm.impl.KJvmCompiledScript
|
||||||
import kotlin.script.experimental.jvmhost.*
|
import kotlin.script.experimental.jvmhost.*
|
||||||
import kotlin.script.experimental.jvmhost.impl.CompiledScriptClassLoader
|
import kotlin.script.experimental.jvmhost.impl.CompiledScriptClassLoader
|
||||||
|
import kotlin.script.experimental.jvmhost.impl.KJvmCompiledModuleInMemory
|
||||||
import kotlin.script.templates.standard.SimpleScriptTemplate
|
import kotlin.script.templates.standard.SimpleScriptTemplate
|
||||||
|
|
||||||
class ScriptingHostTest : TestCase() {
|
class ScriptingHostTest : TestCase() {
|
||||||
@@ -275,6 +279,38 @@ class ScriptingHostTest : TestCase() {
|
|||||||
assertNotNull(res.reports.find { it.message == "The following compiler arguments are ignored when configured from refinement callbacks: -no-jdk, -no-stdlib" })
|
assertNotNull(res.reports.find { it.message == "The following compiler arguments are ignored when configured from refinement callbacks: -no-jdk, -no-stdlib" })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun jvmTargetTestImpl(target: String, expectedVersion: Int) {
|
||||||
|
val script = "println(\"Hi\")"
|
||||||
|
val compilationConfiguration = createJvmCompilationConfigurationFromTemplate<SimpleScriptTemplate> {
|
||||||
|
compilerOptions("-jvm-target", target)
|
||||||
|
}
|
||||||
|
val compiler = JvmScriptCompiler(defaultJvmScriptingHostConfiguration)
|
||||||
|
val compiledScript = runBlocking { compiler(script.toScriptSource(name = "SavedScript.kts"), compilationConfiguration) }
|
||||||
|
assertTrue(compiledScript is ResultWithDiagnostics.Success)
|
||||||
|
|
||||||
|
val jvmCompiledScript = compiledScript.valueOrNull()!! as KJvmCompiledScript
|
||||||
|
val jvmCompiledModule = jvmCompiledScript.compiledModule as KJvmCompiledModuleInMemory
|
||||||
|
val bytes = jvmCompiledModule.compilerOutputFiles["SavedScript.class"]!!
|
||||||
|
|
||||||
|
var classFileVersion: Int? = null
|
||||||
|
ClassReader(bytes).accept(object : ClassVisitor(Opcodes.API_VERSION) {
|
||||||
|
override fun visit(
|
||||||
|
version: Int, access: Int, name: String?, signature: String?, superName: String?, interfaces: Array<out String>?
|
||||||
|
) {
|
||||||
|
classFileVersion = version
|
||||||
|
}
|
||||||
|
}, 0)
|
||||||
|
|
||||||
|
assertEquals(expectedVersion, classFileVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testJvmTarget() {
|
||||||
|
jvmTargetTestImpl("1.6", 50)
|
||||||
|
jvmTargetTestImpl("1.8", 52)
|
||||||
|
jvmTargetTestImpl("9", 53)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMemoryCache() {
|
fun testMemoryCache() {
|
||||||
val script = "val x = 1\nprintln(\"x = \$x\")"
|
val script = "val x = 1\nprintln(\"x = \$x\")"
|
||||||
|
|||||||
+26
-12
@@ -99,9 +99,34 @@ internal fun createInitialConfigurations(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
initialScriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions]?.let { compilerOptions ->
|
||||||
|
kotlinCompilerConfiguration.updateWithCompilerOptions(compilerOptions, messageCollector, ignoredOptionsReportingState, false)
|
||||||
|
}
|
||||||
|
|
||||||
return Pair(initialScriptCompilationConfiguration, kotlinCompilerConfiguration)
|
return Pair(initialScriptCompilationConfiguration, kotlinCompilerConfiguration)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun CompilerConfiguration.updateWithCompilerOptions(
|
||||||
|
compilerOptions: List<String>,
|
||||||
|
messageCollector: ScriptDiagnosticsMessageCollector,
|
||||||
|
ignoredOptionsReportingState: IgnoredOptionsReportingState,
|
||||||
|
isRefinement: Boolean
|
||||||
|
) {
|
||||||
|
val compilerArguments = K2JVMCompilerArguments()
|
||||||
|
parseCommandLineArguments(compilerOptions, compilerArguments)
|
||||||
|
|
||||||
|
reportArgumentsIgnoredGenerally(compilerArguments, messageCollector, ignoredOptionsReportingState)
|
||||||
|
if (isRefinement) {
|
||||||
|
reportArgumentsIgnoredFromRefinement(compilerArguments, messageCollector, ignoredOptionsReportingState)
|
||||||
|
}
|
||||||
|
|
||||||
|
setupCommonArguments(compilerArguments)
|
||||||
|
|
||||||
|
setupJvmSpecificArguments(compilerArguments)
|
||||||
|
|
||||||
|
configureAdvancedJvmOptions(compilerArguments)
|
||||||
|
}
|
||||||
|
|
||||||
private fun ScriptCompilationConfiguration.withUpdatesFromCompilerConfiguration(kotlinCompilerConfiguration: CompilerConfiguration) =
|
private fun ScriptCompilationConfiguration.withUpdatesFromCompilerConfiguration(kotlinCompilerConfiguration: CompilerConfiguration) =
|
||||||
withUpdatedClasspath(kotlinCompilerConfiguration.jvmClasspathRoots)
|
withUpdatedClasspath(kotlinCompilerConfiguration.jvmClasspathRoots)
|
||||||
|
|
||||||
@@ -212,17 +237,6 @@ private fun CompilerConfiguration.updateWithRefinedConfigurations(
|
|||||||
if (updatedCompilerOptions.isNotEmpty() &&
|
if (updatedCompilerOptions.isNotEmpty() &&
|
||||||
updatedCompilerOptions != initialScriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions]
|
updatedCompilerOptions != initialScriptCompilationConfiguration[ScriptCompilationConfiguration.compilerOptions]
|
||||||
) {
|
) {
|
||||||
|
updateWithCompilerOptions(updatedCompilerOptions, messageCollector, reportingState, true)
|
||||||
val updatedArguments = K2JVMCompilerArguments()
|
|
||||||
parseCommandLineArguments(updatedCompilerOptions, updatedArguments)
|
|
||||||
|
|
||||||
reportArgumentsIgnoredGenerally(updatedArguments, messageCollector, reportingState)
|
|
||||||
reportArgumentsIgnoredFromRefinement(updatedArguments, messageCollector, reportingState)
|
|
||||||
|
|
||||||
setupCommonArguments(updatedArguments)
|
|
||||||
|
|
||||||
setupJvmSpecificArguments(updatedArguments)
|
|
||||||
|
|
||||||
configureAdvancedJvmOptions(updatedArguments)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user