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 LanguageVersions : DefaultValues(
"\"" + LanguageVersion.LATEST_STABLE.versionString + "\"",
"null",
LanguageVersion.values().map { "\"${it.description}\"" }
)
@@ -492,4 +492,53 @@ class KotlinGradleIT: BaseGradleIT() {
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
* 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
* 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
@@ -4,14 +4,14 @@ package org.jetbrains.kotlin.gradle.dsl
internal abstract class KotlinJsOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions {
private var apiVersionField: kotlin.String? = null
override var apiVersion: kotlin.String
get() = apiVersionField ?: "1.1"
private var apiVersionField: kotlin.String?? = null
override var apiVersion: kotlin.String?
get() = apiVersionField ?: null
set(value) { apiVersionField = value }
private var languageVersionField: kotlin.String? = null
override var languageVersion: kotlin.String
get() = languageVersionField ?: "1.1"
private var languageVersionField: kotlin.String?? = null
override var languageVersion: kotlin.String?
get() = languageVersionField ?: null
set(value) { languageVersionField = value }
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() {
apiVersion = "1.1"
languageVersion = "1.1"
apiVersion = null
languageVersion = null
suppressWarnings = false
verbose = false
friendModulesDisabled = false
@@ -4,14 +4,14 @@ package org.jetbrains.kotlin.gradle.dsl
internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions {
private var apiVersionField: kotlin.String? = null
override var apiVersion: kotlin.String
get() = apiVersionField ?: "1.1"
private var apiVersionField: kotlin.String?? = null
override var apiVersion: kotlin.String?
get() = apiVersionField ?: null
set(value) { apiVersionField = value }
private var languageVersionField: kotlin.String? = null
override var languageVersion: kotlin.String
get() = languageVersionField ?: "1.1"
private var languageVersionField: kotlin.String?? = null
override var languageVersion: kotlin.String?
get() = languageVersionField ?: null
set(value) { languageVersionField = value }
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() {
apiVersion = "1.1"
languageVersion = "1.1"
apiVersion = null
languageVersion = null
suppressWarnings = false
verbose = false
includeRuntime = false