From 3625c953ae01a5511c751adc120d63ab0e3197af Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Fri, 6 Aug 2021 15:07:00 +0200 Subject: [PATCH] [Gradle] CInteropCommonizerDependent: Implement 'fromAssociateCompilations' This additional API and changes in CInteropCommonizerDependencies.kt will make sure, that test source sets will still receive commonization results, even when the exact targets are not requested by any of the main source sets. ^KT-48138 Verification Pending --- .../internal/CInteropCommonizerDependencies.kt | 12 +++--------- .../native/internal/CInteropCommonizerDependent.kt | 13 +++++++++++++ .../native/internal/CInteropCommonizerTask.kt | 8 +++++--- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependencies.kt index 8db33f68afa..fdca7ed267d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependencies.kt @@ -46,16 +46,10 @@ private fun Project.setupCInteropCommonizerDependenciesForIde(sourceSet: Default val cinteropCommonizerTask = project.copyCommonizeCInteropForIdeTask ?: return addDependency(sourceSet, filesProvider files@{ - val sourceSetCommonizerTarget = getCommonizerTarget(sourceSet) + val directlyDependent = CInteropCommonizerDependent.from(project, sourceSet) + val associateDependent = CInteropCommonizerDependent.fromAssociateCompilations(project, sourceSet) - val additionalVisibleSourceSets = sourceSet.getAdditionalVisibleSourceSets() - .filter { sourceSet -> getCommonizerTarget(sourceSet) == sourceSetCommonizerTarget } - - val cinteropCommonizerDependents = (additionalVisibleSourceSets + sourceSet).toSet() - .mapNotNull { sourceSet -> CInteropCommonizerDependent.from(this, sourceSet) } - .toSet() - - cinteropCommonizerDependents.map { cinteropCommonizerDependent -> + listOfNotNull(directlyDependent, associateDependent).map { cinteropCommonizerDependent -> cinteropCommonizerTask.get().commonizedOutputLibraries(cinteropCommonizerDependent) } }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependent.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependent.kt index 1ca7482d676..79e6c461dfb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerDependent.kt @@ -92,6 +92,19 @@ internal fun CInteropCommonizerDependent.Factory.from(project: Project, sourceSe ) } +internal fun CInteropCommonizerDependent.Factory.fromAssociateCompilations( + project: Project, sourceSet: KotlinSourceSet +): CInteropCommonizerDependent? { + return from( + target = project.getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return null, + compilations = (compilationsBySourceSets(project)[sourceSet] ?: return null) + .filterIsInstance() + .flatMap { compilation -> compilation.associateWithTransitiveClosure } + .filterIsInstance() + .toSet() + ) +} + private fun KotlinSharedNativeCompilation.findDependingNativeCompilations(): Set { val multiplatformExtension = project.multiplatformExtensionOrNull ?: return emptySet() val allParticipatingSourceSetsOfCompilation = allParticipatingSourceSets() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt index 9303a9bdcd7..16240b959b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt @@ -5,11 +5,9 @@ package org.jetbrains.kotlin.gradle.targets.native.internal -import org.gradle.api.file.FileCollection import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.jetbrains.kotlin.commonizer.CommonizerDependency -import org.jetbrains.kotlin.commonizer.NonTargetedCommonizerDependency import org.jetbrains.kotlin.commonizer.TargetedCommonizerDependency import org.jetbrains.kotlin.commonizer.allLeaves import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer @@ -142,7 +140,11 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() { .mapNotNull { sourceSet -> CInteropCommonizerDependent.from(project, sourceSet) } .toSet() - return (fromSharedNativeCompilations + fromSourceSets) + val fromSourceSetsAssociateCompilations = multiplatformExtension.sourceSets + .mapNotNull { sourceSet -> CInteropCommonizerDependent.fromAssociateCompilations(project, sourceSet) } + .toSet() + + return (fromSharedNativeCompilations + fromSourceSets + fromSourceSetsAssociateCompilations) } }