From 7d766add4b4f10afe1058617e842d53d2e20efea Mon Sep 17 00:00:00 2001 From: Yaroslav Chernyshev Date: Mon, 15 Feb 2021 13:53:52 +0300 Subject: [PATCH] Add lambda configurable `languageSettings` function in KotlinSourceSet Function with Groovy Closure is already exists, it provides DSL parity #KT-44834 Fixed --- .../kotlin/gradle/plugin/KotlinSourceSet.kt | 1 + .../kotlin/gradle/NewMultiplatformIT.kt | 22 +++++++++++++++++++ .../plugin/sources/DefaultKotlinSourceSet.kt | 3 +++ .../SourceSetVisibilityInferenceTest.kt | 1 + 4 files changed, 27 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSet.kt index 5216c648049..36de2569362 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinSourceSet.kt @@ -16,6 +16,7 @@ interface KotlinSourceSet : Named, HasKotlinDependencies { val resources: SourceDirectorySet val languageSettings: LanguageSettingsBuilder + fun languageSettings(configure: LanguageSettingsBuilder.() -> Unit): LanguageSettingsBuilder fun languageSettings(configureClosure: Closure): LanguageSettingsBuilder fun dependsOn(other: KotlinSourceSet) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 46a59975511..072ee4dbff2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -692,6 +692,28 @@ class NewMultiplatformIT : BaseGradleIT() { } } + @Test + fun testLanguageSettingsClosureForKotlinDsl() = with(transformNativeTestProjectWithPluginDsl("sample-lib-gradle-kotlin-dsl", gradleVersion, "new-mpp-lib-and-app")) { + gradleBuildScript().appendText( + "\n" + """ + kotlin.sourceSets.all { + languageSettings { + languageVersion = "1.3" + apiVersion = "1.3" + } + } + """.trimIndent() + ) + + listOf("compileKotlinMetadata", "compileKotlinJvm6", "compileKotlinNodeJs").forEach { + build(it) { + assertSuccessful() + assertTasksExecuted(":$it") + assertContains("-language-version 1.3", "-api-version 1.3") + } + } + } + @Test fun testLanguageSettingsApplied() = with(transformNativeTestProject("sample-lib", gradleVersion, "new-mpp-lib-and-app")) { gradleBuildScript().appendText( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt index 3009f2a36bb..49eb0d94765 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt @@ -71,6 +71,9 @@ class DefaultKotlinSourceSet( ConfigureUtil.configure(configureClosure, this) } + override fun languageSettings(configure: LanguageSettingsBuilder.() -> Unit): LanguageSettingsBuilder = + languageSettings.apply { configure(this) } + override fun getName(): String = displayName override fun dependencies(configure: KotlinDependencyHandler.() -> Unit): Unit = diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/SourceSetVisibilityInferenceTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/SourceSetVisibilityInferenceTest.kt index 9c240cdd24c..0d7d1e67a97 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/SourceSetVisibilityInferenceTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/SourceSetVisibilityInferenceTest.kt @@ -253,6 +253,7 @@ class MockKotlinSourceSet(private val name: String) : KotlinSourceSet { override val resources: SourceDirectorySet get() = throw UnsupportedOperationException() override val languageSettings: LanguageSettingsBuilder get() = throw UnsupportedOperationException() override fun languageSettings(configureClosure: Closure): LanguageSettingsBuilder = languageSettings + override fun languageSettings(configure: LanguageSettingsBuilder.() -> Unit): LanguageSettingsBuilder = languageSettings override val apiMetadataConfigurationName: String get() = throw UnsupportedOperationException() override val implementationMetadataConfigurationName: String get() = throw UnsupportedOperationException() override val compileOnlyMetadataConfigurationName: String get() = throw UnsupportedOperationException()