From c4562fd1db38b65b4dbff600d977a06c96628847 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 8 Apr 2021 12:10:45 +0200 Subject: [PATCH] [Gradle] GetCommonizerTargetOfSourceSet: Gracefully handle common non-hmpp workaround --- .../kotlin/gradle/SourceSetCommonizerTargetTest.kt | 14 ++++++++++++++ .../internal/GetCommonizerTargetOfSourceSet.kt | 11 ++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/SourceSetCommonizerTargetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/SourceSetCommonizerTargetTest.kt index 6dc9792574a..5308f0913bf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/SourceSetCommonizerTargetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/SourceSetCommonizerTargetTest.kt @@ -163,4 +163,18 @@ class SourceSetCommonizerTargetTest { assertNull(project.getCommonizerTarget(commonMain), "Expected commonMain to have no commonizer target") assertNull(project.getCommonizerTarget(commonTest), "Expected commonTest to have no commonizer target") } + + @Test + fun `nativeMain with non hmpp workaround`() { + val linux1 = kotlin.linuxX64("linux1") + val linux2 = kotlin.linuxArm64("linux2") + + val nativeMain = kotlin.sourceSets.create("nativeMain") + + listOf(linux1, linux2).forEach { target -> + target.compilations.getByName("main").source(nativeMain) + } + + assertNull(project.getCommonizerTarget(nativeMain), "Expected no commonizer target, since no real source set hierarchy is given") + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/GetCommonizerTargetOfSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/GetCommonizerTargetOfSourceSet.kt index f0f16edb5f0..595fec03dba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/GetCommonizerTargetOfSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/GetCommonizerTargetOfSourceSet.kt @@ -40,12 +40,13 @@ private fun Project.getLeafCommonizerTarget(sourceSet: KotlinSourceSet): LeafCom val konanTargets = compilationsBySourceSets(this)[sourceSet].orEmpty() .flatMap { compilation -> compilation.konanTargets } - return when { - konanTargets.isEmpty() -> null - konanTargets.size == 1 -> LeafCommonizerTarget(konanTargets.single()) - else -> error("Source set ${sourceSet.name} is not a leaf source set. konanTargets=$konanTargets") - } + return if (konanTargets.size == 1) LeafCommonizerTarget(konanTargets.single()) + /* + Can even be more than one, when added using `KotlinCompilation.source`. Still returning null, since this + does not represent a 'proper' source set hierarchy + */ + else null } private fun KotlinSourceSetContainer.resolveSourceSetsDirectlyDependingOn(sourceSet: KotlinSourceSet): Set {