[Gradle] Introduce KotlinTargetHierarchy.ModuleName as public concept

KT-34662
This commit is contained in:
Sebastian Sellmair
2023-03-09 12:58:37 +01:00
committed by Space Team
parent 78673885e5
commit 78751dcb55
12 changed files with 181 additions and 125 deletions
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor
interface KotlinTargetHierarchyDsl {
fun apply(
hierarchyDescriptor: KotlinTargetHierarchyDescriptor,
describeExtension: (KotlinTargetHierarchyBuilder.() -> Unit)? = null
describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? = null
)
/**
@@ -80,6 +80,6 @@ interface KotlinTargetHierarchyDsl {
* @param describeExtension: Additional groups can be described to extend the 'default'/'natural' hierarchy:
* @see KotlinTargetHierarchyDescriptor.extend
*/
fun default(describeExtension: (KotlinTargetHierarchyBuilder.() -> Unit)? = null)
fun custom(describe: KotlinTargetHierarchyBuilder.() -> Unit)
fun default(describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? = null)
fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit)
}
@@ -0,0 +1,21 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.plugin
interface KotlinTargetHierarchy {
data class ModuleName(val name: String) {
override fun toString(): String = name
companion object {
val main = ModuleName("main")
val test = ModuleName("test")
val unitTest = ModuleName("unitTest")
val integrationTest = ModuleName("integrationTest")
val instrumentedTest = ModuleName("instrumentedTest")
}
}
}
@@ -8,16 +8,27 @@ import org.jetbrains.kotlin.konan.target.DEPRECATED_TARGET_MESSAGE
@KotlinTargetsDsl
@ExperimentalKotlinGradlePluginApi
interface KotlinTargetHierarchyBuilder {
interface Root : KotlinTargetHierarchyBuilder {
fun modules(vararg module: KotlinTargetHierarchy.ModuleName)
fun withModule(vararg module: KotlinTargetHierarchy.ModuleName)
fun excludeModule(vararg module: KotlinTargetHierarchy.ModuleName)
}
/* Declaring groups */
fun common(build: KotlinTargetHierarchyBuilder.() -> Unit) = group("common", build)
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
/* low-level APIs */
fun withCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean)
fun withoutCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean)
fun excludeCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean)
@Deprecated("Use 'excludeCompilations' instead", ReplaceWith("excludeCompilations(predicate)"))
fun withoutCompilations(predicate: suspend (KotlinCompilation<*>) -> Boolean) = excludeCompilations(predicate)
@Deprecated("Use plain 'withoutCompilations(!predicate) instead'", ReplaceWith("withoutCompilations { !predicate(it) }"))
fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = withoutCompilations { !predicate(it) }
fun filterCompilations(predicate: (KotlinCompilation<*>) -> Boolean) = excludeCompilations { !predicate(it) }
/* Convenient groups */
fun withNative()
@@ -9,23 +9,23 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
@ExperimentalKotlinGradlePluginApi
interface KotlinTargetHierarchyDescriptor {
fun describe(builder: KotlinTargetHierarchyBuilder)
fun extend(describe: KotlinTargetHierarchyBuilder.() -> Unit): KotlinTargetHierarchyDescriptor
fun describe(builder: KotlinTargetHierarchyBuilder.Root)
fun extend(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit): KotlinTargetHierarchyDescriptor
}
@ExperimentalKotlinGradlePluginApi
fun KotlinTargetHierarchyDescriptor(
describe: KotlinTargetHierarchyBuilder.() -> Unit
describe: KotlinTargetHierarchyBuilder.Root.() -> Unit
): KotlinTargetHierarchyDescriptor {
return KotlinTargetHierarchyDescriptorImpl(describe)
}
@ExperimentalKotlinGradlePluginApi
private class KotlinTargetHierarchyDescriptorImpl(
private val describe: KotlinTargetHierarchyBuilder.() -> Unit
private val describe: KotlinTargetHierarchyBuilder.Root.() -> Unit
) : KotlinTargetHierarchyDescriptor {
override fun extend(describe: KotlinTargetHierarchyBuilder.() -> Unit): KotlinTargetHierarchyDescriptor {
override fun extend(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit): KotlinTargetHierarchyDescriptor {
val sourceDescribe = this.describe
return KotlinTargetHierarchyDescriptor {
sourceDescribe()
@@ -33,5 +33,5 @@ private class KotlinTargetHierarchyDescriptorImpl(
}
}
override fun describe(builder: KotlinTargetHierarchyBuilder) = builder.describe()
override fun describe(builder: KotlinTargetHierarchyBuilder.Root) = builder.describe()
}