[Gradle][MPP] Replace .kotlinSourceSetsIncludingDefault with .kotlinSourceSets

^KT-52726 Verification Pending
^KT-45412 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-09-09 13:20:19 +02:00
committed by Space
parent f4eba62f8c
commit 67fc4f0ed6
8 changed files with 26 additions and 44 deletions
@@ -17,20 +17,17 @@ import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.Category import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.internal.artifacts.ArtifactAttributes import org.gradle.api.internal.artifacts.ArtifactAttributes
import org.gradle.api.plugins.BasePlugin import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.ExtensionAware import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.bundling.Zip import org.gradle.api.tasks.bundling.Zip
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.gradle.language.jvm.tasks.ProcessResources import org.gradle.language.jvm.tasks.ProcessResources
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.internal.reorderPluginClasspathDependencies import org.jetbrains.kotlin.gradle.internal.reorderPluginClasspathDependencies
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
@@ -39,7 +36,6 @@ import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.util.concurrent.Callable import java.util.concurrent.Callable
import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KMutableProperty1
import kotlin.reflect.full.memberProperties import kotlin.reflect.full.memberProperties
@@ -102,13 +98,9 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
} }
override fun configureSourceSet(target: KotlinTargetType) { override fun configureSourceSet(target: KotlinTargetType) {
val project = target.project
target.compilations.all { compilation -> target.compilations.all { compilation ->
if (createDefaultSourceSets) { if (createDefaultSourceSets) {
project.kotlinExtension.sourceSets.maybeCreate(compilation.defaultSourceSetName).also { sourceSet -> compilation.source(compilation.defaultSourceSet) // also adds dependencies, requires the configurations for target and source set to exist at this point
compilation.source(sourceSet) // also adds dependencies, requires the configurations for target and source set to exist at this point
}
} }
} }
} }
@@ -375,5 +375,5 @@ internal fun requestedDependencies(
private val KotlinMultiplatformExtension.platformCompilationSourceSets: Set<KotlinSourceSet> private val KotlinMultiplatformExtension.platformCompilationSourceSets: Set<KotlinSourceSet>
get() = targets.filterNot { it is KotlinMetadataTarget } get() = targets.filterNot { it is KotlinMetadataTarget }
.flatMap { target -> target.compilations } .flatMap { target -> target.compilations }
.flatMap { it.kotlinSourceSetsIncludingDefault } .flatMap { it.kotlinSourceSets }
.toSet() .toSet()
@@ -6,13 +6,11 @@
package org.jetbrains.kotlin.gradle.plugin.mpp package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.fileExtensionCasePermutations
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.tooling.core.closure import org.jetbrains.kotlin.tooling.core.closure
import java.util.*
import java.util.concurrent.Callable import java.util.concurrent.Callable
internal fun KotlinCompilation<*>.isMain(): Boolean = internal fun KotlinCompilation<*>.isMain(): Boolean =
@@ -21,14 +19,6 @@ internal fun KotlinCompilation<*>.isMain(): Boolean =
internal fun KotlinCompilation<*>.isTest(): Boolean = internal fun KotlinCompilation<*>.isTest(): Boolean =
name == KotlinCompilation.TEST_COMPILATION_NAME name == KotlinCompilation.TEST_COMPILATION_NAME
/**
* see https://youtrack.jetbrains.com/issue/KT-45412
* Some implementations of [KotlinCompilation] are not including their [KotlinCompilation.defaultSourceSet] into [kotlinSourceSet]s
* This helper function might disappear in the future, once the behaviour of those [KotlinCompilation] implementations is streamlined.
* @return [KotlinCompilation.kotlinSourceSets] + [KotlinCompilation.defaultSourceSet]
*/
internal val KotlinCompilation<*>.kotlinSourceSetsIncludingDefault: Set<KotlinSourceSet> get() = kotlinSourceSets + defaultSourceSet
internal fun addCommonSourcesToKotlinCompileTask( internal fun addCommonSourcesToKotlinCompileTask(
project: Project, project: Project,
taskName: String, taskName: String,
@@ -6,12 +6,26 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility @file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp package org.jetbrains.kotlin.gradle.plugin.mpp
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsCompilationFactory( class KotlinJsCompilationFactory(
override val target: KotlinOnlyTarget<KotlinJsCompilation>, override val target: KotlinOnlyTarget<KotlinJsCompilation>,
) : KotlinCompilationFactory<KotlinJsCompilation> { ) : KotlinCompilationFactory<KotlinJsCompilation> {
override val itemClass: Class<KotlinJsCompilation> override val itemClass: Class<KotlinJsCompilation>
get() = KotlinJsCompilation::class.java get() = KotlinJsCompilation::class.java
override fun defaultSourceSetName(compilationName: String): String {
val classifier = if (target is KotlinJsTarget && target.irTarget != null)
target.disambiguationClassifierInPlatform
else target.disambiguationClassifier
return lowerCamelCaseName(
classifier,
compilationName
)
}
override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance( override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance(
KotlinJsCompilation::class.java, JsCompilationDetails(target, name, getOrCreateDefaultSourceSet(name)) KotlinJsCompilation::class.java, JsCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
) )
@@ -7,18 +7,16 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
import org.jetbrains.kotlin.gradle.plugin.mpp.JsIrCompilationDetails import org.jetbrains.kotlin.gradle.plugin.mpp.JsIrCompilationDetails
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsIrCompilationFactory( class KotlinJsIrCompilationFactory(
override val target: KotlinOnlyTarget<KotlinJsIrCompilation> override val target: KotlinJsIrTarget
) : KotlinCompilationFactory<KotlinJsIrCompilation> { ) : KotlinCompilationFactory<KotlinJsIrCompilation> {
override val itemClass: Class<KotlinJsIrCompilation> override val itemClass: Class<KotlinJsIrCompilation>
get() = KotlinJsIrCompilation::class.java get() = KotlinJsIrCompilation::class.java
override fun defaultSourceSetName(compilationName: String): String { override fun defaultSourceSetName(compilationName: String): String {
val target = target as KotlinJsIrTarget
return lowerCamelCaseName( return lowerCamelCaseName(
if (target.mixedMode) if (target.mixedMode)
target.disambiguationClassifierInPlatform target.disambiguationClassifierInPlatform
@@ -11,8 +11,8 @@ import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinOptions import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinOptions
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
import org.jetbrains.kotlin.gradle.targets.metadata.GradleKpmMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.GradleKpmMetadataTargetConfigurator
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
class KotlinMetadataTargetPreset( class KotlinMetadataTargetPreset(
project: Project project: Project
@@ -23,6 +23,8 @@ class KotlinMetadataTargetPreset(
forTarget: KotlinMetadataTarget forTarget: KotlinMetadataTarget
): KotlinCompilationFactory<AbstractKotlinCompilation<*>> = ): KotlinCompilationFactory<AbstractKotlinCompilation<*>> =
object : KotlinCompilationFactory<AbstractKotlinCompilation<*>> { object : KotlinCompilationFactory<AbstractKotlinCompilation<*>> {
override val target: KotlinTarget = forTarget
override val itemClass: Class<AbstractKotlinCompilation<*>> override val itemClass: Class<AbstractKotlinCompilation<*>>
get() = AbstractKotlinCompilation::class.java get() = AbstractKotlinCompilation::class.java
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSetsIncludingDefault
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
@@ -242,7 +241,7 @@ private fun CInteropProcess.toGist(): CInteropGist {
identifier = settings.identifier, identifier = settings.identifier,
konanTarget = konanTarget, konanTarget = konanTarget,
// FIXME support cinterop with PM20 // FIXME support cinterop with PM20
sourceSets = project.provider { (settings.compilation as? KotlinCompilation<*>)?.kotlinSourceSetsIncludingDefault }, sourceSets = project.provider { (settings.compilation as? KotlinCompilation<*>)?.kotlinSourceSets },
libraryFile = outputFileProvider libraryFile = outputFileProvider
) )
} }
@@ -6,29 +6,16 @@
package org.jetbrains.kotlin.gradle.targets.native.internal package org.jetbrains.kotlin.gradle.targets.native.internal
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSetsIncludingDefault
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
internal fun KotlinSharedNativeCompilation.getImplicitlyDependingNativeCompilations(): Set<KotlinNativeCompilation> { internal fun KotlinSharedNativeCompilation.getImplicitlyDependingNativeCompilations(): Set<KotlinNativeCompilation> {
val multiplatformExtension = project.multiplatformExtensionOrNull ?: return emptySet() val multiplatformExtension = project.multiplatformExtensionOrNull ?: return emptySet()
val allParticipatingSourceSetsOfCompilation = allParticipatingSourceSets() val thisAllKotlinSourceSets = allKotlinSourceSets
return multiplatformExtension.targets return multiplatformExtension.targets
.flatMap { target -> target.compilations } .flatMap { target -> target.compilations }
.filterIsInstance<KotlinNativeCompilation>() .filterIsInstance<KotlinNativeCompilation>()
.filter { nativeCompilation -> nativeCompilation.allParticipatingSourceSets().containsAll(allParticipatingSourceSetsOfCompilation) } .filter { nativeCompilation -> nativeCompilation.allKotlinSourceSets.containsAll(thisAllKotlinSourceSets) }
.toSet() .toSet()
} }
/**
* Some implementations of [KotlinCompilation] do not contain the default source set in
* [KotlinCompilation.kotlinSourceSets] or [KotlinCompilation.allKotlinSourceSets]
* see KT-45412
*/
private fun KotlinCompilation<*>.allParticipatingSourceSets(): Set<KotlinSourceSet> {
return kotlinSourceSetsIncludingDefault.withDependsOnClosure
}