Also register shaders for kotlin source sets

This commit is contained in:
sebastian.sellmair
2020-11-20 10:01:21 +01:00
committed by Sebastian Sellmair
parent 2c325c45e2
commit cdfbbca580
2 changed files with 35 additions and 1 deletions
@@ -11,6 +11,7 @@ import org.gradle.api.internal.project.ProjectInternal
import org.gradle.testfixtures.ProjectBuilder
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSet
import kotlin.test.*
class SyncKotlinAndAndroidSourceSetsTest {
@@ -136,6 +137,20 @@ class SyncKotlinAndAndroidSourceSetsTest {
"Expected custom configured source directories being present on android source set after evaluation"
)
}
@Test
fun `AndroidSourceSet#kotlinSourceSet extension`() {
kotlin.android()
val main = android.sourceSets.getByName("main")
assertSame(kotlin.sourceSets.getByName("androidMain"), main.kotlinSourceSet)
val test = android.sourceSets.getByName("test")
assertSame(kotlin.sourceSets.getByName("androidTest"), test.kotlinSourceSet)
val androidTest = android.sourceSets.getByName("androidTest")
assertSame(kotlin.sourceSets.getByName("androidAndroidTest"), androidTest.kotlinSourceSet)
}
}
private fun <T> Set<T>.allPairs(): Sequence<Pair<T, T>> {
@@ -22,10 +22,11 @@ internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
android.sourceSets.all { androidSourceSet ->
val kotlinSourceSetName = kotlinSourceSetNameForAndroidSourceSet(target, androidSourceSet.name)
val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(kotlinSourceSetName)
androidSourceSet.kotlinSourceSet = kotlinSourceSet
createDefaultDependsOnEdges(target, kotlinSourceSet, androidSourceSet)
syncKotlinAndAndroidSourceDirs(target, kotlinSourceSet, androidSourceSet)
syncKotlinAndAndroidResources(target, kotlinSourceSet, androidSourceSet)
androidSourceSet.addConvention(KOTLIN_DSL_NAME, kotlinSourceSet)
ifKaptEnabled(project) {
Kapt3GradleSubplugin.createAptConfigurationIfNeeded(project, androidSourceSet.name)
@@ -33,6 +34,12 @@ internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
}
}
internal var AndroidSourceSet.kotlinSourceSet: KotlinSourceSet
get() = getConvention(KOTLIN_DSL_NAME) as KotlinSourceSet
private set(value) {
addConvention(KOTLIN_DSL_NAME, value)
}
private fun createDefaultDependsOnEdges(
target: KotlinAndroidTarget,
kotlinSourceSet: KotlinSourceSet,
@@ -85,6 +92,14 @@ private fun syncKotlinAndAndroidResources(
kotlinSourceSet: KotlinSourceSet,
androidSourceSet: AndroidSourceSet
) {
/*
Non-MPP projects will not have a different name for kotlin source sets vs Android source sets
Registering resource folders is unnecessary therefore.
*/
if (kotlinSourceSet.name == androidSourceSet.name) {
return
}
val project = target.project
androidSourceSet.resources.srcDirs(*kotlinSourceSet.resources.toList().toTypedArray())
@@ -116,6 +131,10 @@ private fun syncKotlinAndAndroidResources(
if (androidSourceSet.jniLibs.srcDirs.isNotEmpty()) {
androidSourceSet.jniLibs.srcDir(kotlinSourceSet.sourceFolderFor(project, "jniLibs"))
}
if (androidSourceSet.shaders.srcDirs.isNotEmpty()) {
androidSourceSet.shaders.srcDir(kotlinSourceSet.sourceFolderFor(project, "shaders"))
}
}
private fun KotlinSourceSet.sourceFolderFor(project: Project, type: String): File {