diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.kt index c1fcbdb8876..7f61a9dccb5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation +import org.jetbrains.kotlin.gradle.plugin.sources.android.AndroidVariantType import org.jetbrains.kotlin.gradle.plugin.sources.android.type import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.tooling.core.withClosure @@ -27,12 +28,8 @@ internal data class KotlinTargetHierarchy( data class Group(val name: String) : Node() { override fun sharedSourceSetName(compilation: KotlinCompilation<*>): String? { - val suffix = when (compilation) { - is KotlinJvmAndroidCompilation -> compilation.androidVariant.type.androidBaseSourceSetName?.name - else -> compilation.name - } ?: return null - - return lowerCamelCaseName(name, suffix) + val moduleName = Module.orNull(compilation)?.name ?: return null + return lowerCamelCaseName(name, moduleName) } } @@ -42,6 +39,30 @@ internal data class KotlinTargetHierarchy( } } + data class Module(val name: String) { + override fun toString(): String = name + + companion object { + val main = Module("main") + val test = Module("test") + private val instrumentedTest = Module("instrumentedTest") + + fun orNull(compilation: KotlinCompilation<*>): Module? = when (compilation) { + is KotlinJvmAndroidCompilation -> when (compilation.androidVariant.type) { + AndroidVariantType.Main -> main + AndroidVariantType.UnitTest -> test + AndroidVariantType.InstrumentedTest -> instrumentedTest + AndroidVariantType.Unknown -> null + } + else -> when (compilation.name) { + "main" -> main + "test" -> test + else -> Module(compilation.name) + } + } + } + } + override fun toString(): String { if (children.isEmpty()) return node.toString() return node.toString() + "\n" + children.joinToString("\n").prependIndent("----") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/naturalKotlinTargetHierarchy.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/naturalKotlinTargetHierarchy.kt index e13e495dd32..9d8c66b8a51 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/naturalKotlinTargetHierarchy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/naturalKotlinTargetHierarchy.kt @@ -5,21 +5,18 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation -import org.jetbrains.kotlin.gradle.plugin.mpp.isMain -import org.jetbrains.kotlin.gradle.plugin.mpp.isTest -import org.jetbrains.kotlin.gradle.plugin.sources.android.AndroidVariantType -import org.jetbrains.kotlin.gradle.plugin.sources.android.type + +private val naturalKotlinTargetHierarchyModules = hashSetOf(KotlinTargetHierarchy.Module.main, KotlinTargetHierarchy.Module.test) internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor { /* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */ - filterCompilations { compilation -> - compilation.isMain() || compilation.isTest() || compilation.isAndroidMain() || compilation.isAndroidUnitTest() - } + withoutCompilations { KotlinTargetHierarchy.Module.orNull(it) !in naturalKotlinTargetHierarchyModules } common { + /* All compilations shall receive be added to the common group by default */ + withCompilations { true } + group("native") { withNative() @@ -57,9 +54,3 @@ internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor { } } } - -private fun KotlinCompilation<*>.isAndroidMain(): Boolean = - this is KotlinJvmAndroidCompilation && this.androidVariant.type == AndroidVariantType.Main - -private fun KotlinCompilation<*>.isAndroidUnitTest(): Boolean = - this is KotlinJvmAndroidCompilation && this.androidVariant.type == AndroidVariantType.UnitTest