[Gradle] Introduce KotlinTargetHierarchy.Module and let targetHierarchy.default() add default common* refines

KT-34662
This commit is contained in:
Sebastian Sellmair
2023-03-07 14:22:32 +01:00
committed by Space Team
parent 0f657b8a74
commit 553639136a
2 changed files with 33 additions and 21 deletions
@@ -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("----")
@@ -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