Switch -jvm-target default to null

This commit is contained in:
Mikhael Bogdanov
2021-11-14 14:23:55 +01:00
committed by Space
parent 6379ed22d1
commit f5da166d7c
9 changed files with 20 additions and 19 deletions
@@ -36,7 +36,7 @@ open class DefaultValues(val defaultValue: String, val possibleValues: List<Stri
)
object JvmTargetVersions : DefaultValues(
"\"" + JvmTarget.DEFAULT.description + "\"",
"null",
JvmTarget.values().map { "\"${it.description}\"" }
)
@@ -89,7 +89,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
valueDescription = "<version>",
description = "Target version of the generated JVM bytecode (1.6 (DEPRECATED), 1.8, 9, 10, 11, 12, 13, 14, 15, 16 or 17), default is 1.8"
)
var jvmTarget: String? by NullableStringFreezableVar(JvmTarget.DEFAULT.description)
var jvmTarget: String? by NullableStringFreezableVar(null)
@GradleOption(DefaultValues.BooleanFalseDefault::class)
@Argument(value = "-java-parameters", description = "Generate metadata for Java 1.8 reflection on method parameters")
@@ -76,6 +76,11 @@ fun CompilerConfiguration.setupJvmSpecificArguments(arguments: K2JVMCompilerArgu
}
}
if (get(JVMConfigurationKeys.JVM_TARGET) == null) {
put(JVMConfigurationKeys.JVM_TARGET, JvmTarget.JVM_1_8)
}
val jvmTarget = get(JVMConfigurationKeys.JVM_TARGET) ?: JvmTarget.DEFAULT
if (jvmTarget.majorVersion < JvmTarget.JVM_1_8.majorVersion) {
val jvmDefaultMode = languageVersionSettings.getFlag(JvmAnalysisFlags.jvmDefaultMode)
@@ -33,7 +33,6 @@ class Java11ModulesIntegrationTest : AbstractKotlinCompilerIntegrationTest() {
val kotlinOptions = mutableListOf(
"-jdk-home", KtTestUtil.getJdk11Home().path,
"-jvm-target", "1.8",
"-Xmodule-path=$paths"
)
if (addModules.isNotEmpty()) {
@@ -573,9 +573,9 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
tasks.named("compileKotlin") {
doLast {
def actualJvmTarget = filteredArgumentsMap['jvmTarget']
if (actualJvmTarget != "1.8") {
if (actualJvmTarget != "null") {
//noinspection GroovyAssignabilityCheck
throw new GradleException("Expected `jvmTarget` value is '1.8' but the actual value was ${'$'}actualJvmTarget")
throw new GradleException("Expected `jvmTarget` value is 'null' but the actual value was ${'$'}actualJvmTarget")
}
}
}
@@ -21,9 +21,9 @@ interface KotlinJvmOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOption
/**
* Target version of the generated JVM bytecode (1.6 (DEPRECATED), 1.8, 9, 10, 11, 12, 13, 14, 15, 16 or 17), default is 1.8
* Possible values: "1.6", "1.8", "9", "10", "11", "12", "13", "14", "15", "16", "17"
* Default value: "1.8"
* Default value: null
*/
var jvmTarget: kotlin.String
var jvmTarget: kotlin.String?
/**
* Name of the generated .kotlin_module file
@@ -47,12 +47,7 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
@Deprecated(message = "This option is not working well with Gradle caching and will be removed in the future.", level = DeprecationLevel.WARNING)
override var jdkHome: kotlin.String? = null
internal var jvmTargetField: kotlin.String? = null
override var jvmTarget: kotlin.String
get() = jvmTargetField ?: "1.8"
set(value) {
jvmTargetField = value
}
override var jvmTarget: kotlin.String? = null
override var moduleName: kotlin.String? = null
@@ -95,7 +90,7 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
useFirField?.let { args.useFir = it }
javaParametersField?.let { args.javaParameters = it }
jdkHome?.let { args.jdkHome = it }
jvmTargetField?.let { args.jvmTarget = it }
jvmTarget?.let { args.jvmTarget = it }
moduleName?.let { args.moduleName = it }
noJdkField?.let { args.noJdk = it }
noStdlibField?.let { args.noStdlib = it }
@@ -113,7 +108,7 @@ internal fun org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.fi
useFir = false
javaParameters = false
jdkHome = null
jvmTarget = "1.8"
jvmTarget = null
moduleName = null
noJdk = false
noStdlib = true
@@ -155,7 +155,7 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor(
// parentKotlinOptionsImpl is set from 'kotlin-android' plugin
val appliedJvmTargets = listOfNotNull(task.kotlinOptions, task.parentKotlinOptionsImpl.orNull)
.mapNotNull { (it as KotlinJvmOptionsImpl).jvmTargetField }
.mapNotNull { (it as KotlinJvmOptionsImpl).jvmTarget }
if (appliedJvmTargets.isEmpty()) {
// For Java 9 and Java 10 JavaVersion returns "1.9" or "1.10" accordingly
@@ -180,7 +180,7 @@ internal abstract class DefaultKotlinJavaToolchain @Inject constructor(
kotlinCompileTaskProvider()?.let { task ->
// parentKotlinOptionsImpl is set from 'kotlin-android' plugin
val appliedJvmTargets = listOfNotNull(task.kotlinOptions, task.parentKotlinOptionsImpl.orNull)
.mapNotNull { (it as KotlinJvmOptionsImpl).jvmTargetField }
.mapNotNull { (it as KotlinJvmOptionsImpl).jvmTarget }
if (appliedJvmTargets.isEmpty()) {
// For Java 9 and Java 10 JavaVersion returns "1.9" or "1.10" accordingly
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.compilerRunner.*
import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.Companion.normalizeForFlagFile
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.daemon.common.MultiModuleICSettings
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.incremental.*
@@ -797,10 +798,11 @@ abstract class KotlinCompile @Inject constructor(
else -> targetCompatibility
}
if (normalizedJavaTarget != args.jvmTarget) {
val jvmTarget = args.jvmTarget ?: JvmTarget.DEFAULT.toString()
if (normalizedJavaTarget != jvmTarget) {
val javaTaskName = associatedJavaCompileTaskName.get()
val errorMessage = "'$javaTaskName' task (current target is $targetCompatibility) and " +
"'$name' task (current target is ${args.jvmTarget}) " +
"'$name' task (current target is $jvmTarget) " +
"jvm target compatibility should be set to the same Java version."
when (jvmTargetValidationMode.get()) {
PropertiesProvider.JvmTargetValidationMode.ERROR -> throw GradleException(errorMessage)