[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.Usage
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.artifacts.ArtifactAttributes
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.bundling.Zip
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.gradle.language.jvm.tasks.ProcessResources
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.plugin.mpp.*
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.registerTask
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.util.concurrent.Callable
import kotlin.reflect.KMutableProperty1
import kotlin.reflect.full.memberProperties
@@ -102,13 +98,9 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
}
override fun configureSourceSet(target: KotlinTargetType) {
val project = target.project
target.compilations.all { compilation ->
if (createDefaultSourceSets) {
project.kotlinExtension.sourceSets.maybeCreate(compilation.defaultSourceSetName).also { sourceSet ->
compilation.source(sourceSet) // also adds dependencies, requires the configurations for target and source set to exist at this point
}
compilation.source(compilation.defaultSourceSet) // 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>
get() = targets.filterNot { it is KotlinMetadataTarget }
.flatMap { target -> target.compilations }
.flatMap { it.kotlinSourceSetsIncludingDefault }
.flatMap { it.kotlinSourceSets }
.toSet()
@@ -6,13 +6,11 @@
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
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 java.util.*
import java.util.concurrent.Callable
internal fun KotlinCompilation<*>.isMain(): Boolean =
@@ -21,14 +19,6 @@ internal fun KotlinCompilation<*>.isMain(): Boolean =
internal fun KotlinCompilation<*>.isTest(): Boolean =
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(
project: Project,
taskName: String,
@@ -6,12 +6,26 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsCompilationFactory(
override val target: KotlinOnlyTarget<KotlinJsCompilation>,
) : KotlinCompilationFactory<KotlinJsCompilation> {
override val itemClass: Class<KotlinJsCompilation>
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(
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.KotlinCompilationFactory
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsIrCompilationFactory(
override val target: KotlinOnlyTarget<KotlinJsIrCompilation>
override val target: KotlinJsIrTarget
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
override val itemClass: Class<KotlinJsIrCompilation>
get() = KotlinJsIrCompilation::class.java
override fun defaultSourceSetName(compilationName: String): String {
val target = target as KotlinJsIrTarget
return lowerCamelCaseName(
if (target.mixedMode)
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.mpp.pm20.hasKpmModel
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.KotlinMetadataTargetConfigurator
class KotlinMetadataTargetPreset(
project: Project
@@ -23,6 +23,8 @@ class KotlinMetadataTargetPreset(
forTarget: KotlinMetadataTarget
): KotlinCompilationFactory<AbstractKotlinCompilation<*>> =
object : KotlinCompilationFactory<AbstractKotlinCompilation<*>> {
override val target: KotlinTarget = forTarget
override val itemClass: Class<AbstractKotlinCompilation<*>>
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.KotlinSourceSet
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.targets.native.internal.CInteropCommonizerTask.CInteropGist
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
@@ -242,7 +241,7 @@ private fun CInteropProcess.toGist(): CInteropGist {
identifier = settings.identifier,
konanTarget = konanTarget,
// FIXME support cinterop with PM20
sourceSets = project.provider { (settings.compilation as? KotlinCompilation<*>)?.kotlinSourceSetsIncludingDefault },
sourceSets = project.provider { (settings.compilation as? KotlinCompilation<*>)?.kotlinSourceSets },
libraryFile = outputFileProvider
)
}
@@ -6,29 +6,16 @@
package org.jetbrains.kotlin.gradle.targets.native.internal
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.KotlinSharedNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSetsIncludingDefault
import org.jetbrains.kotlin.gradle.plugin.sources.withDependsOnClosure
internal fun KotlinSharedNativeCompilation.getImplicitlyDependingNativeCompilations(): Set<KotlinNativeCompilation> {
val multiplatformExtension = project.multiplatformExtensionOrNull ?: return emptySet()
val allParticipatingSourceSetsOfCompilation = allParticipatingSourceSets()
val thisAllKotlinSourceSets = allKotlinSourceSets
return multiplatformExtension.targets
.flatMap { target -> target.compilations }
.filterIsInstance<KotlinNativeCompilation>()
.filter { nativeCompilation -> nativeCompilation.allParticipatingSourceSets().containsAll(allParticipatingSourceSetsOfCompilation) }
.filter { nativeCompilation -> nativeCompilation.allKotlinSourceSets.containsAll(thisAllKotlinSourceSets) }
.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
}