xref: /aosp_15_r20/external/kotlinx.coroutines/buildSrc/src/main/kotlin/SourceSets.kt (revision 7a7160fed73afa6648ef8aa100d4a336fe921d9a)
1 import org.gradle.api.*
2 import org.jetbrains.kotlin.gradle.plugin.*
3 import org.gradle.kotlin.dsl.*
4 
KotlinSourceSetnull5 fun KotlinSourceSet.configureDirectoryPaths() {
6     if (project.isMultiplatform) {
7         val srcDir = if (name.endsWith("Main")) "src" else "test"
8         val platform = name.dropLast(4)
9         kotlin.srcDir("$platform/$srcDir")
10         if (name == "jvmMain") {
11             resources.srcDir("$platform/resources")
12         } else if (name == "jvmTest") {
13             resources.srcDir("$platform/test-resources")
14         }
15     } else if (platformOf(project) == "jvm") {
16         when (name) {
17             "main" -> {
18                 kotlin.srcDir("src")
19                 resources.srcDir("resources")
20             }
21             "test" -> {
22                 kotlin.srcDir("test")
23                 resources.srcDir("test-resources")
24             }
25         }
26     } else {
27         throw IllegalArgumentException("Unclear how to configure source sets for ${project.name}")
28     }
29 }
30 
31 /**
32  * Creates shared source sets for a group of source sets.
33  *
34  * [reverseDependencies] is a list of prefixes of names of source sets that depend on the new source set.
35  * [dependencies] is a list of prefixes of names of source sets that the new source set depends on.
36  * [groupName] is the prefix of the names of the new source sets.
37  *
38  * The suffixes of the source sets are "Main" and "Test".
39  */
NamedDomainObjectContainernull40 fun NamedDomainObjectContainer<KotlinSourceSet>.groupSourceSets(
41     groupName: String,
42     reverseDependencies: List<String>,
43     dependencies: List<String>
44 ) {
45     val sourceSetSuffixes = listOf("Main", "Test")
46     for (suffix in sourceSetSuffixes) {
47         register(groupName + suffix) {
48             for (dep in dependencies) {
49                 dependsOn(get(dep + suffix))
50             }
51             for (revDep in reverseDependencies) {
52                 get(revDep + suffix).dependsOn(this)
53             }
54         }
55     }
56 }
57