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 43240f63d42..65649696f11 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 @@ -37,18 +37,20 @@ class NewMultiplatformIT : BaseGradleIT() { @Test fun testLibAndApp() = doTestLibAndApp( "sample-lib", - "sample-app", - gradleVersion + "sample-app" ) @Test fun testLibAndAppWithGradleKotlinDsl() = doTestLibAndApp( "sample-lib-gradle-kotlin-dsl", "sample-app-gradle-kotlin-dsl", - GradleVersionRequired.AtLeast("4.10.2") // Using a SNAPSHOT version in the plugins DSL requires 4.10 + GradleVersionRequired.AtLeast("4.9") // earlier Gradle versions fail at accessors codegen ) - fun doTestLibAndApp(libProjectName: String, appProjectName: String, gradleVersionRequired: GradleVersionRequired) { + private fun doTestLibAndApp( + libProjectName: String, appProjectName: String, + gradleVersionRequired: GradleVersionRequired = gradleVersion + ) { val libProject = transformProjectWithPluginsDsl(libProjectName, gradleVersionRequired, "new-mpp-lib-and-app") val appProject = transformProjectWithPluginsDsl(appProjectName, gradleVersionRequired, "new-mpp-lib-and-app") val oldStyleAppProject = Project("sample-old-style-app", gradleVersionRequired, "new-mpp-lib-and-app") @@ -234,7 +236,9 @@ class NewMultiplatformIT : BaseGradleIT() { classesWithoutJava = getFilePathsSet("build/classes") } - gradleBuildScript().modify { it.replace("presets.jvm", "presets.jvmWithJava") } + gradleBuildScript().modify { + it.replace("presets.jvm", "presets.jvmWithJava").replace("jvm(", "targetFromPreset(presets.jvmWithJava, ") + } projectDir.resolve("src/main/java").apply { mkdirs() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts index 63bf114ad4c..6e5a246819e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib-gradle-kotlin-dsl/build.gradle.kts @@ -21,11 +21,11 @@ kotlin { macosX64("macos64") targets.all { - mavenPublication { - pom.withXml { + mavenPublication(Action { + pom.withXml(Action { asNode().appendNode("name", "Sample MPP library") - } - } + }) + }) } sourceSets { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index 571ff24f98d..a7e2df35872 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -38,9 +38,9 @@ open class KotlinProjectExtension { val experimental: ExperimentalExtension get() = DslObject(this).extensions.getByType(ExperimentalExtension::class.java) - var sourceSets: NamedDomainObjectContainer + var sourceSets: NamedDomainObjectContainer @Suppress("UNCHECKED_CAST") - get() = DslObject(this).extensions.getByName("sourceSets") as NamedDomainObjectContainer + get() = DslObject(this).extensions.getByName("sourceSets") as NamedDomainObjectContainer internal set(value) { DslObject(this).extensions.add("sourceSets", value) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index de7e6ad4805..bba4ad95ee9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.gradle.plugin +import org.gradle.api.NamedDomainObjectFactory import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.internal.FeaturePreviews @@ -28,7 +29,6 @@ import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory import org.jetbrains.kotlin.gradle.tasks.KOTLIN_COMPILER_EMBEDDABLE import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP import java.io.FileNotFoundException @@ -44,7 +44,7 @@ abstract class KotlinBasePluginWrapper( open val projectExtensionClass: KClass get() = KotlinProjectExtension::class - internal open fun kotlinSourceSetFactory(project: Project): KotlinSourceSetFactory = + internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory = DefaultKotlinSourceSetFactory(project, fileResolver) override fun apply(project: Project) { @@ -64,8 +64,8 @@ abstract class KotlinBasePluginWrapper( val kotlinGradleBuildServices = KotlinGradleBuildServices.getInstance(project.gradle) project.createKotlinExtension(projectExtensionClass).apply { - fun kotlinSourceSetContainer(factory: KotlinSourceSetFactory) = - project.container(factory.itemClass, factory) + fun kotlinSourceSetContainer(factory: NamedDomainObjectFactory) = + project.container(KotlinSourceSet::class.java, factory) project.kotlinExtension.sourceSets = kotlinSourceSetContainer(kotlinSourceSetFactory(project)) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt index d90d40fc788..bf0265b92a6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt @@ -18,7 +18,7 @@ import java.io.File internal abstract class KotlinSourceSetFactory internal constructor( protected val fileResolver: FileResolver, protected val project: Project -) : NamedDomainObjectFactory { +) : NamedDomainObjectFactory { abstract val itemClass: Class