[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.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation 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.plugin.sources.android.type
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.tooling.core.withClosure import org.jetbrains.kotlin.tooling.core.withClosure
@@ -27,12 +28,8 @@ internal data class KotlinTargetHierarchy(
data class Group(val name: String) : Node() { data class Group(val name: String) : Node() {
override fun sharedSourceSetName(compilation: KotlinCompilation<*>): String? { override fun sharedSourceSetName(compilation: KotlinCompilation<*>): String? {
val suffix = when (compilation) { val moduleName = Module.orNull(compilation)?.name ?: return null
is KotlinJvmAndroidCompilation -> compilation.androidVariant.type.androidBaseSourceSetName?.name return lowerCamelCaseName(name, moduleName)
else -> compilation.name
} ?: return null
return lowerCamelCaseName(name, suffix)
} }
} }
@@ -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 { override fun toString(): String {
if (children.isEmpty()) return node.toString() if (children.isEmpty()) return node.toString()
return node.toString() + "\n" + children.joinToString("\n").prependIndent("----") return node.toString() + "\n" + children.joinToString("\n").prependIndent("----")
@@ -5,21 +5,18 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy 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.KotlinTargetHierarchyDescriptor
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain private val naturalKotlinTargetHierarchyModules = hashSetOf(KotlinTargetHierarchy.Module.main, KotlinTargetHierarchy.Module.test)
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
internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor { internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor {
/* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */ /* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */
filterCompilations { compilation -> withoutCompilations { KotlinTargetHierarchy.Module.orNull(it) !in naturalKotlinTargetHierarchyModules }
compilation.isMain() || compilation.isTest() || compilation.isAndroidMain() || compilation.isAndroidUnitTest()
}
common { common {
/* All compilations shall receive be added to the common group by default */
withCompilations { true }
group("native") { group("native") {
withNative() 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