[Gradle] KotlinTargetHierarchyBuilder: Support Android compilations
KT-55218
This commit is contained in:
committed by
Space Team
parent
8bea195d68
commit
7c70319308
+9
-2
@@ -6,6 +6,8 @@
|
||||
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.type
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.tooling.core.withClosure
|
||||
|
||||
@@ -24,8 +26,13 @@ internal data class KotlinTargetHierarchy(
|
||||
}
|
||||
|
||||
data class Group(val name: String) : Node() {
|
||||
override fun sharedSourceSetName(compilation: KotlinCompilation<*>): String {
|
||||
return lowerCamelCaseName(name, compilation.name)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy
|
||||
import org.gradle.api.DomainObjectCollection
|
||||
import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
|
||||
internal fun applyKotlinTargetHierarchy(
|
||||
hierarchyDescriptor: KotlinTargetHierarchyDescriptor,
|
||||
@@ -39,7 +40,9 @@ private fun applyKotlinTargetHierarchy(
|
||||
if (hierarchy.children.isNotEmpty()) {
|
||||
childSourceSets.forEach { childSourceSet -> childSourceSet.dependsOn(sharedSourceSet) }
|
||||
} else {
|
||||
compilation.defaultSourceSet.dependsOn(sharedSourceSet)
|
||||
compilation.internal.kotlinSourceSets.forAll { compilationSourceSet ->
|
||||
compilationSourceSet.dependsOn(sharedSourceSet)
|
||||
}
|
||||
}
|
||||
|
||||
return sharedSourceSet
|
||||
|
||||
+13
-1
@@ -5,13 +5,19 @@
|
||||
|
||||
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
|
||||
|
||||
internal val naturalKotlinTargetHierarchy = KotlinTargetHierarchyDescriptor {
|
||||
/* natural hierarchy is only applied to default 'main'/'test' compilations (by default) */
|
||||
filterCompilations { compilation -> compilation.isMain() || compilation.isTest() }
|
||||
filterCompilations { compilation ->
|
||||
compilation.isMain() || compilation.isTest() || compilation.isAndroidMain() || compilation.isAndroidUnitTest()
|
||||
}
|
||||
|
||||
common {
|
||||
group("native") {
|
||||
@@ -51,3 +57,9 @@ 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
|
||||
|
||||
+54
@@ -192,6 +192,60 @@ class KotlinTargetHierarchyDslTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - hierarchy - jvm and android`() {
|
||||
val project = buildProjectWithMPP {
|
||||
setMultiplatformAndroidSourceSetLayoutVersion(2)
|
||||
}
|
||||
|
||||
val kotlin = project.multiplatformExtension
|
||||
|
||||
assumeAndroidSdkAvailable()
|
||||
project.androidLibrary { compileSdk = 31 }
|
||||
|
||||
kotlin.targetHierarchy.default {
|
||||
common {
|
||||
group("jvmAndAndroid") {
|
||||
anyJvm()
|
||||
anyAndroid()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
kotlin.android()
|
||||
kotlin.jvm()
|
||||
|
||||
project.evaluate()
|
||||
|
||||
assertEquals(
|
||||
stringSetOf("androidDebug", "androidMain", "androidRelease", "jvmAndAndroidMain", "jvmMain"),
|
||||
kotlin.dependingSourceSetNames("commonMain")
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
stringSetOf("jvmMain", "androidMain", "androidDebug", "androidRelease"),
|
||||
kotlin.dependingSourceSetNames("jvmAndAndroidMain")
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
stringSetOf("jvmAndAndroidTest", "jvmTest", "androidUnitTest", "androidUnitTestDebug", "androidUnitTestRelease"),
|
||||
kotlin.dependingSourceSetNames("commonTest")
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
stringSetOf("jvmTest", "androidUnitTest", "androidUnitTest", "androidUnitTestDebug", "androidUnitTestRelease"),
|
||||
kotlin.dependingSourceSetNames("jvmAndAndroidTest")
|
||||
)
|
||||
|
||||
/* Check all source sets: All from jvm and android target + expected common source sets */
|
||||
assertEquals(
|
||||
setOf("commonMain", "commonTest", "jvmAndAndroidMain", "jvmAndAndroidTest") +
|
||||
kotlin.android().compilations.flatMap { it.kotlinSourceSets }.map { it.name } +
|
||||
kotlin.jvm().compilations.flatMap { it.kotlinSourceSets }.map { it.name },
|
||||
kotlin.sourceSets.map { it.name }.toStringSet()
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test - hierarchy apply - extend`() {
|
||||
val descriptor = KotlinTargetHierarchyDescriptor {
|
||||
|
||||
Reference in New Issue
Block a user