Remove the out-projection from kotlinSourceSets in kotlin extension
Gradle versions older than 4.10 could not correctly provide access to the source set via delegation (i.e. `getting`, `creating` etc.) because of the out-projection. Remove the out-projection and expose just `DomainObjectContainer<KotlinSourceSet>`, as under the hood we can still use the `DefaultKotlinSourceSet` type for the items.
This commit is contained in:
+9
-5
@@ -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()
|
||||
|
||||
+4
-4
@@ -21,11 +21,11 @@ kotlin {
|
||||
macosX64("macos64")
|
||||
|
||||
targets.all {
|
||||
mavenPublication {
|
||||
pom.withXml {
|
||||
mavenPublication(Action<MavenPublication> {
|
||||
pom.withXml(Action<XmlProvider> {
|
||||
asNode().appendNode("name", "Sample MPP library")
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
+2
-2
@@ -38,9 +38,9 @@ open class KotlinProjectExtension {
|
||||
val experimental: ExperimentalExtension
|
||||
get() = DslObject(this).extensions.getByType(ExperimentalExtension::class.java)
|
||||
|
||||
var sourceSets: NamedDomainObjectContainer<out KotlinSourceSet>
|
||||
var sourceSets: NamedDomainObjectContainer<KotlinSourceSet>
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
get() = DslObject(this).extensions.getByName("sourceSets") as NamedDomainObjectContainer<out KotlinSourceSet>
|
||||
get() = DslObject(this).extensions.getByName("sourceSets") as NamedDomainObjectContainer<KotlinSourceSet>
|
||||
internal set(value) {
|
||||
DslObject(this).extensions.add("sourceSets", value)
|
||||
}
|
||||
|
||||
+4
-4
@@ -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<out KotlinProjectExtension> get() = KotlinProjectExtension::class
|
||||
|
||||
internal open fun kotlinSourceSetFactory(project: Project): KotlinSourceSetFactory<out KotlinSourceSet> =
|
||||
internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory<KotlinSourceSet> =
|
||||
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 <T : KotlinSourceSet> kotlinSourceSetContainer(factory: KotlinSourceSetFactory<T>) =
|
||||
project.container(factory.itemClass, factory)
|
||||
fun kotlinSourceSetContainer(factory: NamedDomainObjectFactory<KotlinSourceSet>) =
|
||||
project.container(KotlinSourceSet::class.java, factory)
|
||||
|
||||
project.kotlinExtension.sourceSets = kotlinSourceSetContainer(kotlinSourceSetFactory(project))
|
||||
}
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import java.io.File
|
||||
internal abstract class KotlinSourceSetFactory<T : KotlinSourceSet> internal constructor(
|
||||
protected val fileResolver: FileResolver,
|
||||
protected val project: Project
|
||||
) : NamedDomainObjectFactory<T> {
|
||||
) : NamedDomainObjectFactory<KotlinSourceSet> {
|
||||
|
||||
abstract val itemClass: Class<T>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user