diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt index 57fa2e61c0f..d31a36f22d5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformSourceSetConventions.kt @@ -55,17 +55,15 @@ interface KotlinMultiplatformSourceSetConventions { operator fun NamedDomainObjectProvider.invoke( configure: KotlinSourceSet.() -> Unit, - ) = configure(configure) + ): Unit = get().run(configure) fun NamedDomainObjectProvider.dependencies( handler: KotlinDependencyHandler.() -> Unit, - ) = get().dependencies(handler) + ): Unit = get().dependencies(handler) fun NamedDomainObjectProvider.languageSettings( configure: LanguageSettingsBuilder.() -> Unit, - ) = configure { sourceSet -> - sourceSet.languageSettings(configure) - } + ): Unit = this { languageSettings(configure) } } /* Implementation */ diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt index 714390936ab..9aba2ee6a8f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMultiplatformSourceSetConventionsTest.kt @@ -51,6 +51,23 @@ class KotlinMultiplatformSourceSetConventionsTest { } } + @Test + fun `test - invoke - allows creating new source set in closure`() { + val project = buildProjectWithMPP() + project.multiplatformExtension.apply { + sourceSets.jvmMain { + /* + When done wrong, expect: + org.gradle.api.internal.AbstractMutationGuard$IllegalMutationException: + NamedDomainObjectContainer#create(String) on KotlinSourceSet container cannot be executed in the current context + */ + dependsOn(sourceSets.create("foo")) + } + + assertEquals(setOf("foo"), sourceSets.jvmMain.get().dependsOn.map { it.name }.toSet()) + } + } + @Test fun `test - languageSettings`() { val project = buildProjectWithMPP()