Gradle: set default values of languageVersion and apiVersion to null

Before the change, Gradle always explicitly set language and api
version to the latest version, preventing the compiler
from inferencing the arguments.

     #KT-18047 fixed
This commit is contained in:
Alexey Tsvetkov
2017-05-29 17:19:27 +03:00
parent b06b18de07
commit 6e07b1cd99
5 changed files with 70 additions and 21 deletions
@@ -29,7 +29,7 @@ open class DefaultValues(val defaultValue: String, val possibleValues: List<Stri
object StringNullDefault : DefaultValues("null") object StringNullDefault : DefaultValues("null")
object LanguageVersions : DefaultValues( object LanguageVersions : DefaultValues(
"\"" + LanguageVersion.LATEST_STABLE.versionString + "\"", "null",
LanguageVersion.values().map { "\"${it.description}\"" } LanguageVersion.values().map { "\"${it.description}\"" }
) )
@@ -492,4 +492,53 @@ class KotlinGradleIT: BaseGradleIT() {
assertSuccessful() assertSuccessful()
} }
} }
@Test
fun testLanguageVersionApiVersionExplicit() {
val project = Project("kotlinProject", "3.3")
project.setupWorkingDir()
val buildGradle = File(project.projectDir, "build.gradle")
val buildGradleContentCopy = buildGradle.readText()
fun updateBuildGradle(langVersion: String, apiVersion: String) {
buildGradle.writeText(
"""
$buildGradleContentCopy
compileKotlin {
kotlinOptions {
languageVersion = '$langVersion'
apiVersion = '$apiVersion'
}
}
""".trimIndent())
}
assert(buildGradleContentCopy.indexOf("languageVersion") < 0) { "build.gradle should not contain 'languageVersion'" }
assert(buildGradleContentCopy.indexOf("apiVersion") < 0) { "build.gradle should not contain 'apiVersion'" }
// check the arguments are not passed by default (they are inferred by the compiler)
project.build("clean", "compileKotlin") {
assertSuccessful()
assertNotContains("-language-version")
assertNotContains("-api-version")
assertNoWarnings()
}
// check the arguments are always passed if specified explicitly
updateBuildGradle("1.0", "1.0")
project.build("clean", "compileKotlin") {
assertSuccessful()
assertContains("-language-version 1.0")
assertContains("-api-version 1.0")
}
updateBuildGradle("1.1", "1.1")
project.build("clean", "compileKotlin") {
assertSuccessful()
assertContains("-language-version 1.1")
assertContains("-api-version 1.1")
}
}
} }
@@ -7,16 +7,16 @@ interface KotlinCommonOptions {
/** /**
* Allow to use declarations only from the specified version of bundled libraries * Allow to use declarations only from the specified version of bundled libraries
* Possible values: "1.0", "1.1", "1.2 (EXPERIMENTAL)" * Possible values: "1.0", "1.1", "1.2 (EXPERIMENTAL)"
* Default value: "1.1" * Default value: null
*/ */
var apiVersion: kotlin.String var apiVersion: kotlin.String?
/** /**
* Provide source compatibility with specified language version * Provide source compatibility with specified language version
* Possible values: "1.0", "1.1", "1.2 (EXPERIMENTAL)" * Possible values: "1.0", "1.1", "1.2 (EXPERIMENTAL)"
* Default value: "1.1" * Default value: null
*/ */
var languageVersion: kotlin.String var languageVersion: kotlin.String?
/** /**
* Generate no warnings * Generate no warnings
@@ -4,14 +4,14 @@ package org.jetbrains.kotlin.gradle.dsl
internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions { internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions {
private var apiVersionField: kotlin.String? = null private var apiVersionField: kotlin.String?? = null
override var apiVersion: kotlin.String override var apiVersion: kotlin.String?
get() = apiVersionField ?: "1.1" get() = apiVersionField ?: null
set(value) { apiVersionField = value } set(value) { apiVersionField = value }
private var languageVersionField: kotlin.String? = null private var languageVersionField: kotlin.String?? = null
override var languageVersion: kotlin.String override var languageVersion: kotlin.String?
get() = languageVersionField ?: "1.1" get() = languageVersionField ?: null
set(value) { languageVersionField = value } set(value) { languageVersionField = value }
private var suppressWarningsField: kotlin.Boolean? = null private var suppressWarningsField: kotlin.Boolean? = null
@@ -87,8 +87,8 @@ internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.Ko
} }
internal fun org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments.fillDefaultValues() { internal fun org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments.fillDefaultValues() {
apiVersion = "1.1" apiVersion = null
languageVersion = "1.1" languageVersion = null
suppressWarnings = false suppressWarnings = false
verbose = false verbose = false
friendModulesDisabled = false friendModulesDisabled = false
@@ -4,14 +4,14 @@ package org.jetbrains.kotlin.gradle.dsl
internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions { internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions {
private var apiVersionField: kotlin.String? = null private var apiVersionField: kotlin.String?? = null
override var apiVersion: kotlin.String override var apiVersion: kotlin.String?
get() = apiVersionField ?: "1.1" get() = apiVersionField ?: null
set(value) { apiVersionField = value } set(value) { apiVersionField = value }
private var languageVersionField: kotlin.String? = null private var languageVersionField: kotlin.String?? = null
override var languageVersion: kotlin.String override var languageVersion: kotlin.String?
get() = languageVersionField ?: "1.1" get() = languageVersionField ?: null
set(value) { languageVersionField = value } set(value) { languageVersionField = value }
private var suppressWarningsField: kotlin.Boolean? = null private var suppressWarningsField: kotlin.Boolean? = null
@@ -75,8 +75,8 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K
} }
internal fun org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.fillDefaultValues() { internal fun org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.fillDefaultValues() {
apiVersion = "1.1" apiVersion = null
languageVersion = "1.1" languageVersion = null
suppressWarnings = false suppressWarnings = false
verbose = false verbose = false
includeRuntime = false includeRuntime = false