[Gradle] Implement .commonizerTarget as 'Future' value
^KT-34662 Verification Pending
This commit is contained in:
committed by
Space Team
parent
02120a6822
commit
ec2d8150fd
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPro
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyTransformers.IdePlatformStdlibCommonDependencyFilter
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizerTarget
|
||||
|
||||
internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMultiplatformImport {
|
||||
return IdeMultiplatformImportImpl(extension).apply {
|
||||
@@ -95,7 +95,7 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeCommonizedCinteropDependencyResolver,
|
||||
constraint = { sourceSet -> getCommonizerTarget(sourceSet) is SharedCommonizerTarget },
|
||||
constraint = { sourceSet -> sourceSet.commonizerTarget.getOrThrow() is SharedCommonizerTarget },
|
||||
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
|
||||
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
|
||||
)
|
||||
|
||||
+2
-2
@@ -15,8 +15,8 @@ import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropMetadataDependencyTransformationTask
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.cinteropMetadataDependencyTransformationForIdeTaskName
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropMetadataDependencyClasspathForIde
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||
|
||||
internal object IdeCInteropMetadataDependencyClasspathResolver : IdeDependencyResolver, IdeDependencyResolver.WithBuildDependencies {
|
||||
@@ -33,7 +33,7 @@ internal object IdeCInteropMetadataDependencyClasspathResolver : IdeDependencyRe
|
||||
override fun dependencies(project: Project): Iterable<Any> {
|
||||
return project.multiplatformExtension.sourceSets
|
||||
.filterIsInstance<DefaultKotlinSourceSet>()
|
||||
.filter { getCommonizerTarget(it) is SharedCommonizerTarget }
|
||||
.filter { it.commonizerTarget.getOrThrow() is SharedCommonizerTarget}
|
||||
.mapNotNull { project.locateDependencyTask(it) }
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -12,9 +12,8 @@ import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.extras.isCommonized
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeNativeDistributionTask
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizerTarget
|
||||
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
||||
|
||||
internal object IdeCommonizedNativePlatformDependencyResolver :
|
||||
@@ -22,7 +21,7 @@ internal object IdeCommonizedNativePlatformDependencyResolver :
|
||||
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
val project = sourceSet.project
|
||||
val commonizerTarget = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return emptySet()
|
||||
val commonizerTarget = sourceSet.commonizerTarget.getOrThrow() as? SharedCommonizerTarget ?: return emptySet()
|
||||
val commonizerTask = project.commonizeNativeDistributionTask?.get() ?: return emptySet()
|
||||
val outputDirectory = resolveCommonizedDirectory(commonizerTask.rootOutputDirectory, commonizerTarget)
|
||||
|
||||
|
||||
+2
-3
@@ -13,14 +13,13 @@ import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizerTarget
|
||||
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
||||
|
||||
internal object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
val project = sourceSet.project
|
||||
val commonizerTarget = getCommonizerTarget(sourceSet) as? LeafCommonizerTarget ?: return emptySet()
|
||||
val commonizerTarget = sourceSet.commonizerTarget.getOrThrow() as? LeafCommonizerTarget ?: return emptySet()
|
||||
val konanTarget = commonizerTarget.konanTargetOrNull ?: return emptySet()
|
||||
|
||||
return sourceSet.project.konanDistribution.platformLibsDir.resolve(konanTarget.name)
|
||||
|
||||
+3
-3
@@ -272,7 +272,7 @@ class KotlinMetadataTargetConfigurator :
|
||||
}
|
||||
}
|
||||
|
||||
private fun createMetadataCompilation(
|
||||
private suspend fun createMetadataCompilation(
|
||||
target: KotlinMetadataTarget,
|
||||
sourceSet: KotlinSourceSet,
|
||||
allMetadataJar: TaskProvider<out Jar>,
|
||||
@@ -331,7 +331,7 @@ class KotlinMetadataTargetConfigurator :
|
||||
}
|
||||
}
|
||||
|
||||
private fun configureMetadataDependenciesForCompilation(compilation: KotlinCompilation<*>) {
|
||||
private suspend fun configureMetadataDependenciesForCompilation(compilation: KotlinCompilation<*>) {
|
||||
val project = compilation.target.project
|
||||
val sourceSet = compilation.defaultSourceSet
|
||||
|
||||
@@ -348,7 +348,7 @@ class KotlinMetadataTargetConfigurator :
|
||||
// Transformed Multiplatform Libraries based on source set visibility
|
||||
compilation.compileDependencyFiles += project.files(transformationTask.map { it.allTransformedLibraries })
|
||||
|
||||
if (sourceSet is DefaultKotlinSourceSet && getCommonizerTarget(sourceSet) is SharedCommonizerTarget) {
|
||||
if (sourceSet is DefaultKotlinSourceSet && sourceSet.sharedCommonizerTarget.await() is SharedCommonizerTarget) {
|
||||
compilation.compileDependencyFiles += project.createCInteropMetadataDependencyClasspath(sourceSet)
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -9,9 +9,10 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.launch
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||
import java.io.File
|
||||
|
||||
@@ -59,11 +60,10 @@ internal fun Project.cinteropCommonizerDependencies(sourceSet: DefaultKotlinSour
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.setupCInteropTransformCompositeMetadataDependenciesForIde(sourceSet: DefaultKotlinSourceSet) {
|
||||
whenEvaluated {
|
||||
if (getCommonizerTarget(sourceSet) !is SharedCommonizerTarget) return@whenEvaluated
|
||||
addIntransitiveMetadataDependencyIfPossible(
|
||||
sourceSet, createCInteropMetadataDependencyClasspathForIde(sourceSet)
|
||||
)
|
||||
}
|
||||
private fun Project.setupCInteropTransformCompositeMetadataDependenciesForIde(sourceSet: DefaultKotlinSourceSet) = launch {
|
||||
if (sourceSet.internal.commonizerTarget.await() !is SharedCommonizerTarget) return@launch
|
||||
addIntransitiveMetadataDependencyIfPossible(
|
||||
sourceSet, createCInteropMetadataDependencyClasspathForIde(sourceSet)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -74,14 +74,14 @@ internal fun CInteropCommonizerDependent.Factory.from(
|
||||
|
||||
internal fun CInteropCommonizerDependent.Factory.from(compilation: KotlinSharedNativeCompilation): CInteropCommonizerDependent? {
|
||||
return from(
|
||||
getCommonizerTarget(compilation) as? SharedCommonizerTarget ?: return null,
|
||||
compilation.commonizerTarget.getOrThrow() as? SharedCommonizerTarget ?: return null,
|
||||
compilation.getImplicitlyDependingNativeCompilations()
|
||||
)
|
||||
}
|
||||
|
||||
internal fun CInteropCommonizerDependent.Factory.from(sourceSet: KotlinSourceSet): CInteropCommonizerDependent? {
|
||||
return from(
|
||||
target = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return null,
|
||||
target = sourceSet.commonizerTarget.getOrThrow() as? SharedCommonizerTarget ?: return null,
|
||||
compilations = sourceSet.internal.compilations
|
||||
.filterIsInstance<KotlinNativeCompilation>().toSet()
|
||||
)
|
||||
@@ -89,7 +89,7 @@ internal fun CInteropCommonizerDependent.Factory.from(sourceSet: KotlinSourceSet
|
||||
|
||||
internal fun CInteropCommonizerDependent.Factory.fromAssociateCompilations(sourceSet: KotlinSourceSet): CInteropCommonizerDependent? {
|
||||
return from(
|
||||
target = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return null,
|
||||
target = sourceSet.commonizerTarget.getOrThrow() as? SharedCommonizerTarget ?: return null,
|
||||
compilations = sourceSet.internal.compilations
|
||||
.filterIsInstance<KotlinNativeCompilation>()
|
||||
.flatMap { compilation -> compilation.associateWithClosure }
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ internal open class CInteropCommonizerTask
|
||||
private val groupedCommonizerDependencies: Map<CInteropCommonizerGroup, List<CInteropCommonizerDependencies>> by lazy {
|
||||
val multiplatformExtension = project.multiplatformExtensionOrNull ?: return@lazy emptyMap()
|
||||
|
||||
val sourceSetsByTarget = multiplatformExtension.sourceSets.groupBy { sourceSet -> getCommonizerTarget(sourceSet) }
|
||||
val sourceSetsByTarget = multiplatformExtension.sourceSets.groupBy { sourceSet -> sourceSet.commonizerTarget.getOrThrow() }
|
||||
val sourceSetsByGroup = multiplatformExtension.sourceSets.groupBy { sourceSet ->
|
||||
CInteropCommonizerDependent.from(sourceSet)?.let { findInteropsGroup(it) }
|
||||
}
|
||||
|
||||
+2
-2
@@ -74,7 +74,7 @@ private fun Project.createCInteropMetadataDependencyClasspathFromAssociatedCompi
|
||||
forIde: Boolean
|
||||
): FileCollection {
|
||||
return filesProvider files@{
|
||||
val commonizerTarget = getSharedCommonizerTarget(sourceSet) ?: return@files emptySet<File>()
|
||||
val commonizerTarget = sourceSet.sharedCommonizerTarget.getOrThrow() ?: return@files emptySet<File>()
|
||||
|
||||
/*
|
||||
We will find the 'most suitable' / 'closest matching' source set
|
||||
@@ -83,7 +83,7 @@ private fun Project.createCInteropMetadataDependencyClasspathFromAssociatedCompi
|
||||
*/
|
||||
val (associatedSourceSet, _) = sourceSet.getAdditionalVisibleSourceSets()
|
||||
.filterIsInstance<DefaultKotlinSourceSet>()
|
||||
.mapNotNull { otherSourceSet -> otherSourceSet to (getSharedCommonizerTarget(otherSourceSet) ?: return@mapNotNull null) }
|
||||
.mapNotNull { otherSourceSet -> otherSourceSet to (otherSourceSet.sharedCommonizerTarget.getOrThrow() ?: return@mapNotNull null) }
|
||||
.filter { (_, otherCommonizerTarget) -> otherCommonizerTarget.targets.containsAll(commonizerTarget.targets) }
|
||||
.minByOrNull { (_, otherCommonizerTarget) -> otherCommonizerTarget.targets.size } ?: return@files emptySet<File>()
|
||||
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ private fun CInteropMetadataDependencyTransformationTask.configureTaskOrder() {
|
||||
}
|
||||
|
||||
private fun CInteropMetadataDependencyTransformationTask.onlyIfSourceSetIsSharedNative() {
|
||||
val isSharedCommonizerTarget = getCommonizerTarget(sourceSet) is SharedCommonizerTarget
|
||||
val isSharedCommonizerTarget = sourceSet.internal.commonizerTarget.getOrThrow() is SharedCommonizerTarget
|
||||
onlyIf { isSharedCommonizerTarget }
|
||||
}
|
||||
|
||||
|
||||
-24
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.LeafCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||
|
||||
internal fun getCommonizerTarget(compilation: KotlinCompilation<*>): CommonizerTarget? {
|
||||
if (compilation is KotlinNativeCompilation) {
|
||||
return LeafCommonizerTarget(compilation.konanTarget)
|
||||
}
|
||||
|
||||
if (compilation is KotlinSharedNativeCompilation) {
|
||||
return getCommonizerTarget(compilation.defaultSourceSet) ?: CommonizerTarget(compilation.konanTargets)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.allLeaves
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
|
||||
internal fun getCommonizerTarget(sourceSet: KotlinSourceSet): CommonizerTarget? {
|
||||
val allCompilationLeafTargets = sourceSet.internal.compilations
|
||||
.filter { compilation -> compilation !is KotlinMetadataCompilation }
|
||||
.map { compilation -> getCommonizerTarget(compilation) ?: return null }
|
||||
.allLeaves()
|
||||
|
||||
return when {
|
||||
allCompilationLeafTargets.isEmpty() -> null
|
||||
allCompilationLeafTargets.size == 1 -> allCompilationLeafTargets.single()
|
||||
else -> SharedCommonizerTarget(allCompilationLeafTargets)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun getSharedCommonizerTarget(sourceSet: KotlinSourceSet): SharedCommonizerTarget? {
|
||||
return getCommonizerTarget(sourceSet) as? SharedCommonizerTarget
|
||||
}
|
||||
+26
-22
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.MissingNativeStdlibWarning.showMissingNativeStdlibWarning
|
||||
@@ -35,25 +36,29 @@ internal fun Project.setupKotlinNativePlatformDependencies() {
|
||||
checkNotNull(commonizeNativeDistributionTask) { "Missing commonizeNativeDistributionTask" }
|
||||
}
|
||||
|
||||
kotlin.sourceSets.forEach { sourceSet ->
|
||||
val target = getCommonizerTarget(sourceSet) ?: return@forEach
|
||||
addDependencies(sourceSet, getNativeDistributionDependencies(target))
|
||||
addDependencies(
|
||||
sourceSet, project.filesProvider { setOf(konanDistribution.stdlib) },
|
||||
/*
|
||||
kotlin.sourceSets.all { sourceSet ->
|
||||
launch {
|
||||
val target = sourceSet.internal.commonizerTarget.await() ?: return@launch
|
||||
addDependencies(sourceSet, getNativeDistributionDependencies(target))
|
||||
addDependencies(
|
||||
sourceSet, project.filesProvider { setOf(konanDistribution.stdlib) },
|
||||
/*
|
||||
Shared Native compilations already implicitly add this dependency.
|
||||
Adding it again will result in a warning
|
||||
*/
|
||||
isCompilationDependency = false
|
||||
)
|
||||
isCompilationDependency = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (isPlatformIntegerCommonizationEnabled) {
|
||||
kotlin.nativeRootSourceSets.forEach { sourceSet ->
|
||||
dependencies.add(
|
||||
sourceSet.implementationConfigurationName,
|
||||
"$KOTLIN_MODULE_GROUP:$PLATFORM_INTEGERS_SUPPORT_LIBRARY:${getKotlinPluginVersion()}"
|
||||
)
|
||||
launch {
|
||||
if (isPlatformIntegerCommonizationEnabled) {
|
||||
kotlin.nativeRootSourceSets().forEach { sourceSet ->
|
||||
dependencies.add(
|
||||
sourceSet.implementationConfigurationName,
|
||||
"$KOTLIN_MODULE_GROUP:$PLATFORM_INTEGERS_SUPPORT_LIBRARY:${getKotlinPluginVersion()}"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,16 +70,15 @@ internal fun Project.getNativeDistributionDependencies(target: CommonizerTarget)
|
||||
}
|
||||
}
|
||||
|
||||
internal val KotlinMultiplatformExtension.nativeRootSourceSets: Collection<KotlinSourceSet>
|
||||
get() {
|
||||
val nativeSourceSets = sourceSets.filter { sourceSet -> getCommonizerTarget(sourceSet) != null }
|
||||
return nativeSourceSets.filter { sourceSet ->
|
||||
val allVisibleSourceSets = sourceSet.dependsOn + getVisibleSourceSetsFromAssociateCompilations(sourceSet)
|
||||
allVisibleSourceSets.none { dependency ->
|
||||
dependency in nativeSourceSets
|
||||
}
|
||||
internal suspend fun KotlinMultiplatformExtension.nativeRootSourceSets(): Collection<KotlinSourceSet> {
|
||||
val nativeSourceSets = sourceSets.filter { sourceSet -> sourceSet.internal.commonizerTarget.await() != null }
|
||||
return nativeSourceSets.filter { sourceSet ->
|
||||
val allVisibleSourceSets = sourceSet.dependsOn + getVisibleSourceSetsFromAssociateCompilations(sourceSet)
|
||||
allVisibleSourceSets.none { dependency ->
|
||||
dependency in nativeSourceSets
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Project.getOriginalPlatformLibrariesFor(target: LeafCommonizerTarget): FileCollection = project.filesProvider {
|
||||
konanDistribution.platformLibsDir.resolve(target.konanTarget.name).listLibraryFiles().toSet()
|
||||
|
||||
+1
-1
@@ -116,7 +116,7 @@ private fun Project.collectAllSharedCommonizerTargetsFromBuild(): Set<SharedComm
|
||||
|
||||
private fun Project.collectAllSharedCommonizerTargetsFromProject(): Set<SharedCommonizerTarget> {
|
||||
return (project.multiplatformExtensionOrNull ?: return emptySet()).sourceSets
|
||||
.mapNotNull { sourceSet -> getCommonizerTarget(sourceSet) }
|
||||
.mapNotNull { sourceSet -> sourceSet.commonizerTarget.getOrThrow() }
|
||||
.filterIsInstance<SharedCommonizerTarget>()
|
||||
.toSet()
|
||||
}
|
||||
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.native.internal
|
||||
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.LeafCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.allLeaves
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.await
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.utils.Future
|
||||
import org.jetbrains.kotlin.gradle.utils.lazyFuture
|
||||
import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
|
||||
internal val KotlinSourceSet.commonizerTarget: Future<CommonizerTarget?> by lazyFuture {
|
||||
await(KotlinPluginLifecycle.Stage.AfterFinaliseRefinesEdges)
|
||||
@OptIn(UnsafeApi::class)
|
||||
inferCommonizerTarget(this)
|
||||
}
|
||||
|
||||
internal val KotlinSourceSet.sharedCommonizerTarget: Future<SharedCommonizerTarget?> by lazyFuture {
|
||||
commonizerTarget.await() as? SharedCommonizerTarget
|
||||
}
|
||||
|
||||
internal val KotlinCompilation<*>.commonizerTarget: Future<CommonizerTarget?> by lazyFuture {
|
||||
await(KotlinPluginLifecycle.Stage.AfterFinaliseRefinesEdges)
|
||||
@OptIn(UnsafeApi::class)
|
||||
inferCommonizerTarget(this)
|
||||
}
|
||||
|
||||
@UnsafeApi("Use sourceSet.commonizerTarget instead")
|
||||
internal fun inferCommonizerTarget(sourceSet: KotlinSourceSet): CommonizerTarget? {
|
||||
val allCompilationLeafTargets = sourceSet.internal.compilations
|
||||
.filter { compilation -> compilation !is KotlinMetadataCompilation }
|
||||
.map { compilation -> inferCommonizerTarget(compilation) ?: return null }
|
||||
.allLeaves()
|
||||
|
||||
return when {
|
||||
allCompilationLeafTargets.isEmpty() -> null
|
||||
allCompilationLeafTargets.size == 1 -> allCompilationLeafTargets.single()
|
||||
else -> SharedCommonizerTarget(allCompilationLeafTargets)
|
||||
}
|
||||
}
|
||||
|
||||
@UnsafeApi("Use compilation.commonizerTarget instead")
|
||||
internal fun inferCommonizerTarget(compilation: KotlinCompilation<*>): CommonizerTarget? {
|
||||
if (compilation is KotlinNativeCompilation) {
|
||||
return LeafCommonizerTarget(compilation.konanTarget)
|
||||
}
|
||||
|
||||
if (compilation is KotlinSharedNativeCompilation) {
|
||||
return inferCommonizerTarget(compilation.defaultSourceSet) ?: CommonizerTarget(compilation.konanTargets)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
+3
@@ -27,6 +27,7 @@ class IdeNativePlatformDependencyResolverTest {
|
||||
val kotlin = project.multiplatformExtension
|
||||
kotlin.targetHierarchy.default()
|
||||
kotlin.linuxX64()
|
||||
project.evaluate()
|
||||
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
@@ -51,6 +52,7 @@ class IdeNativePlatformDependencyResolverTest {
|
||||
val kotlin = project.multiplatformExtension
|
||||
kotlin.targetHierarchy.default()
|
||||
kotlin.macosArm64()
|
||||
project.evaluate()
|
||||
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
@@ -74,6 +76,7 @@ class IdeNativePlatformDependencyResolverTest {
|
||||
val kotlin = project.multiplatformExtension
|
||||
kotlin.jvm()
|
||||
kotlin.linuxX64()
|
||||
project.evaluate()
|
||||
|
||||
val commonMain = kotlin.sourceSets.getByName("commonMain")
|
||||
val commonTest = kotlin.sourceSets.getByName("commonTest")
|
||||
|
||||
+11
-4
@@ -67,13 +67,18 @@ class CInteropMetadataDependencyTransformationTaskTest : MultiplatformExtensionT
|
||||
linuxX64Test.dependsOn(nativeTest)
|
||||
linuxArm64Test.dependsOn(nativeTest)
|
||||
|
||||
project.evaluate()
|
||||
val nativeTestTransformationTask = project.locateOrRegisterCInteropMetadataDependencyTransformationTask(nativeTest)
|
||||
|
||||
assertNotNull(nativeTestTransformationTask, "Expected transformation task registered for 'nativeTest'")
|
||||
assertEquals(
|
||||
listOf(commonMain, commonTest, nativeMain).map { sourceSet ->
|
||||
project.locateOrRegisterCInteropMetadataDependencyTransformationTask(sourceSet as DefaultKotlinSourceSet)?.get()
|
||||
?: fail("Expected transformation task registered for '${sourceSet.name}'")
|
||||
listOf(commonMain, commonTest, nativeMain).flatMap { sourceSet ->
|
||||
listOf(
|
||||
project.locateOrRegisterCInteropMetadataDependencyTransformationTask(sourceSet as DefaultKotlinSourceSet)?.get()
|
||||
?: fail("Expected transformation task registered for '${sourceSet.name}'"),
|
||||
project.locateOrRegisterCInteropMetadataDependencyTransformationTaskForIde(sourceSet)?.get()
|
||||
?: fail("Expected transformation task registered for '${sourceSet.name}'(forIde)")
|
||||
)
|
||||
}.toSet(),
|
||||
nativeTestTransformationTask.get().mustRunAfter.getDependencies(null).toSet()
|
||||
)
|
||||
@@ -96,6 +101,8 @@ class CInteropMetadataDependencyTransformationTaskTest : MultiplatformExtensionT
|
||||
linuxArm64Main.dependsOn(linuxMain)
|
||||
linuxX64Main.dependsOn(linuxMain)
|
||||
|
||||
project.evaluate()
|
||||
|
||||
listOf(
|
||||
"commonMain", "jvmMain", "linuxArm64Main", "linuxX64Main"
|
||||
).map { sourceSetName -> kotlin.sourceSets.getByName(sourceSetName) }.forEach { sourceSet ->
|
||||
@@ -128,7 +135,7 @@ class CInteropMetadataDependencyTransformationTaskTest : MultiplatformExtensionT
|
||||
linuxX64()
|
||||
linuxArm64()
|
||||
}
|
||||
}
|
||||
}.also { it.evaluate() }
|
||||
|
||||
fun Project.transformationTaskOutputs(): Set<File> {
|
||||
val kotlin = multiplatformExtension
|
||||
|
||||
+47
-48
@@ -8,23 +8,23 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.api.plugins.ExtraPropertiesExtension
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.commonizer.CommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.LeafCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.inferCommonizerTarget
|
||||
import org.jetbrains.kotlin.gradle.util.addBuildEventsListenerRegistryMock
|
||||
import org.jetbrains.kotlin.gradle.util.buildProject
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget.*
|
||||
import org.jetbrains.kotlin.tooling.core.UnsafeApi
|
||||
import kotlin.test.BeforeTest
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNull
|
||||
|
||||
@OptIn(UnsafeApi::class)
|
||||
class SourceSetCommonizerTargetTest {
|
||||
|
||||
private lateinit var project: ProjectInternal
|
||||
@@ -37,7 +37,6 @@ class SourceSetCommonizerTargetTest {
|
||||
project.extensions.getByType(ExtraPropertiesExtension::class.java).set("kotlin.mpp.enableCompatibilityMetadataVariant", "false")
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
kotlin = project.extensions.getByName("kotlin") as KotlinMultiplatformExtension
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -52,14 +51,14 @@ class SourceSetCommonizerTargetTest {
|
||||
val linuxTest = kotlin.sourceSets.getByName("linuxTest")
|
||||
val macosTest = kotlin.sourceSets.getByName("macosTest")
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosTest))
|
||||
|
||||
project.evaluate()
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonTest))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(commonMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(commonTest))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -80,16 +79,16 @@ class SourceSetCommonizerTargetTest {
|
||||
macosMain.dependsOn(nativeMain)
|
||||
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosTest))
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(nativeMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(nativeMain))
|
||||
|
||||
project.evaluate()
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonTest))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(commonMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(commonTest))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -109,16 +108,16 @@ class SourceSetCommonizerTargetTest {
|
||||
linuxAMain.dependsOn(nativeMain)
|
||||
linuxBMain.dependsOn(nativeMain)
|
||||
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(linuxAMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(linuxATest))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(linuxBMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(linuxBTest))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxAMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxATest))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxBMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxBTest))
|
||||
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(nativeMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(nativeMain))
|
||||
|
||||
project.evaluate()
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(commonMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(commonTest))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(commonMain))
|
||||
assertEquals(LeafCommonizerTarget(LINUX_X64), inferCommonizerTarget(commonTest))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -148,31 +147,31 @@ class SourceSetCommonizerTargetTest {
|
||||
iosX64Main.dependsOn(iosMain)
|
||||
iosArm64Main.dependsOn(iosMain)
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest))
|
||||
assertEquals(CommonizerTarget(IOS_X64), getCommonizerTarget(iosX64Test))
|
||||
assertEquals(CommonizerTarget(IOS_X64), getCommonizerTarget(iosX64Test))
|
||||
assertEquals(CommonizerTarget(IOS_ARM64), getCommonizerTarget(iosArm64Main))
|
||||
assertEquals(CommonizerTarget(IOS_ARM64), getCommonizerTarget(iosArm64Test))
|
||||
assertEquals(CommonizerTarget(IOS_X64, IOS_ARM64), getCommonizerTarget(iosMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosTest))
|
||||
assertEquals(CommonizerTarget(IOS_X64), inferCommonizerTarget(iosX64Test))
|
||||
assertEquals(CommonizerTarget(IOS_X64), inferCommonizerTarget(iosX64Test))
|
||||
assertEquals(CommonizerTarget(IOS_ARM64), inferCommonizerTarget(iosArm64Main))
|
||||
assertEquals(CommonizerTarget(IOS_ARM64), inferCommonizerTarget(iosArm64Test))
|
||||
assertEquals(CommonizerTarget(IOS_X64, IOS_ARM64), inferCommonizerTarget(iosMain))
|
||||
|
||||
assertEquals(
|
||||
CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64, LINUX_X64),
|
||||
getCommonizerTarget(nativeMain)
|
||||
inferCommonizerTarget(nativeMain)
|
||||
)
|
||||
|
||||
project.evaluate()
|
||||
|
||||
assertEquals(
|
||||
CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64, LINUX_X64),
|
||||
getCommonizerTarget(commonMain)
|
||||
inferCommonizerTarget(commonMain)
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
CommonizerTarget(IOS_ARM64, IOS_X64, LINUX_X64, MACOS_X64),
|
||||
getCommonizerTarget(commonTest)
|
||||
inferCommonizerTarget(commonTest)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -196,18 +195,18 @@ class SourceSetCommonizerTargetTest {
|
||||
linuxMain.dependsOn(nativeMain)
|
||||
macosMain.dependsOn(nativeMain)
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest))
|
||||
assertNull(getCommonizerTarget(jvmMain), "Expected jvmMain to have no commonizer target")
|
||||
assertNull(getCommonizerTarget(jvmTest), "Expected jvmTest to have no commonizer target")
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64), inferCommonizerTarget(linuxTest))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosMain))
|
||||
assertEquals(CommonizerTarget(MACOS_X64), inferCommonizerTarget(macosTest))
|
||||
assertNull(inferCommonizerTarget(jvmMain), "Expected jvmMain to have no commonizer target")
|
||||
assertNull(inferCommonizerTarget(jvmTest), "Expected jvmTest to have no commonizer target")
|
||||
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(nativeMain))
|
||||
assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), inferCommonizerTarget(nativeMain))
|
||||
|
||||
project.evaluate()
|
||||
assertNull(getCommonizerTarget(commonMain), "Expected commonMain to have no commonizer target")
|
||||
assertNull(getCommonizerTarget(commonTest), "Expected commonTest to have no commonizer target")
|
||||
assertNull(inferCommonizerTarget(commonMain), "Expected commonMain to have no commonizer target")
|
||||
assertNull(inferCommonizerTarget(commonTest), "Expected commonTest to have no commonizer target")
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -223,7 +222,7 @@ class SourceSetCommonizerTargetTest {
|
||||
|
||||
assertEquals(
|
||||
SharedCommonizerTarget(setOf(linux1.konanTarget, linux2.konanTarget)),
|
||||
getCommonizerTarget(nativeMain)
|
||||
inferCommonizerTarget(nativeMain)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -240,7 +239,7 @@ class SourceSetCommonizerTargetTest {
|
||||
linux2Main.dependsOn(nativeMain)
|
||||
orphan.dependsOn(nativeMain)
|
||||
|
||||
assertEquals(CommonizerTarget(linux1.konanTarget, linux2.konanTarget), getCommonizerTarget(nativeMain))
|
||||
assertEquals(CommonizerTarget(linux1.konanTarget, linux2.konanTarget), inferCommonizerTarget(nativeMain))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -252,6 +251,6 @@ class SourceSetCommonizerTargetTest {
|
||||
orphan1.dependsOn(nativeMain)
|
||||
orphan2.dependsOn(nativeMain)
|
||||
|
||||
assertEquals(null, getCommonizerTarget(nativeMain))
|
||||
assertEquals(null, inferCommonizerTarget(nativeMain))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user