1 import org.gradle.api.* 2 import org.jetbrains.kotlin.gradle.plugin.* 3 import org.gradle.kotlin.dsl.* 4 KotlinSourceSetnull5fun 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 */ NamedDomainObjectContainernull40fun 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