Support -Xuse-experimental in the new MPP languageSettings { ... } DSL

Add the corresponding Gradle plugin DSL, consistency checks, and logic
for propagating these settings to the compiler during build.

Issue #KT-26840 In Progress
This commit is contained in:
Sergey Igushkin
2018-10-10 17:54:24 +03:00
parent bde6d841c1
commit 5db23f1a81
6 changed files with 74 additions and 17 deletions
@@ -311,18 +311,29 @@ class NewMultiplatformIT : BaseGradleIT() {
gradleBuildScript().appendText(
"\n" + """
kotlin.sourceSets.jvm6Main.languageSettings {
languageVersion = '1.3'
apiVersion = '1.3'
enableLanguageFeature('InlineClasses')
progressiveMode = true
kotlin.sourceSets.all {
it.languageSettings {
languageVersion = '1.3'
apiVersion = '1.3'
enableLanguageFeature('InlineClasses')
useExperimentalAnnotation('kotlin.ExperimentalUnsignedTypes')
useExperimentalAnnotation('kotlin.contracts.ExperimentalContracts')
progressiveMode = true
}
}
""".trimIndent()
)
build("compileKotlinJvm6") {
assertSuccessful()
assertContains("-language-version 1.3", "-api-version 1.3", "-XXLanguage:+InlineClasses", " -progressive")
listOf("compileKotlinJvm6", "compileKotlinNodeJs", "compileKotlin${nativeHostTargetName.capitalize()}").forEach {
build(it) {
assertSuccessful()
assertTasksExecuted(":$it")
assertContains(
"-language-version 1.3", "-api-version 1.3", "-XXLanguage:+InlineClasses",
" -progressive", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes",
"-Xuse-experimental=kotlin.contracts.ExperimentalContracts"
)
}
}
}
@@ -351,8 +362,20 @@ class NewMultiplatformIT : BaseGradleIT() {
}
}
testMonotonousCheck("languageSettings.languageVersion = '1.4'", SourceSetConsistencyChecks.languageVersionCheckHint)
testMonotonousCheck("languageSettings.enableLanguageFeature('InlineClasses')", SourceSetConsistencyChecks.unstableFeaturesHint)
testMonotonousCheck(
"languageSettings.languageVersion = '1.4'",
SourceSetConsistencyChecks.languageVersionCheckHint
)
testMonotonousCheck(
"languageSettings.enableLanguageFeature('InlineClasses')",
SourceSetConsistencyChecks.unstableFeaturesHint
)
testMonotonousCheck(
"languageSettings.useExperimentalAnnotation('kotlin.ExperimentalUnsignedTypes')",
SourceSetConsistencyChecks.experimentalAnnotationsInUseHint
)
// check that enabling a bugfix feature and progressive mode or advancing API level
// don't require doing the same for dependent source sets:
@@ -951,4 +974,4 @@ class NewMultiplatformIT : BaseGradleIT() {
assertFileExists("foo/2.txt")
}
}
}
}
@@ -38,13 +38,20 @@ kotlin {
}
sourceSets {
commonMain {
dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
}
jvm6Main {
dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.23.4'
}
}
nodeJsMain {
dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib-js'
implementation 'org.jetbrains.kotlinx:kotlinx-html-js:0.6.11'
}
}