[Gradle][MPP] Implement initial KotlinTargetHierarchy APIs
^KT-53570 Verification Pending
This commit is contained in:
committed by
Space Team
parent
1fc2575052
commit
c5d6162578
+86
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.dsl
|
||||
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
interface KotlinTargetHierarchyDsl {
|
||||
fun apply(
|
||||
hierarchyDescriptor: KotlinTargetHierarchyDescriptor,
|
||||
describeExtension: (KotlinTargetHierarchyBuilder.() -> Unit)? = null
|
||||
)
|
||||
|
||||
/**
|
||||
* Set's up a 'natural'/'default' hierarchy withing [KotlinTarget]'s in the project.
|
||||
*
|
||||
* #### Example 1
|
||||
*
|
||||
* ```kotlin
|
||||
* kotlin {
|
||||
* targets.hierarchy.default() // <- position of this call is not relevant!
|
||||
*
|
||||
* iosX64()
|
||||
* iosArm64()
|
||||
* linuxX64()
|
||||
* linuxArm64()
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* Will create the following SourceSets:
|
||||
* `[iosMain, iosTest, appleMain, appleTest, linuxMain, linuxTest, nativeMain, nativeTest]
|
||||
*
|
||||
*
|
||||
* Hierarchy:
|
||||
* ```
|
||||
* common
|
||||
* |
|
||||
* +-----------------+-------------------+
|
||||
* | |
|
||||
*
|
||||
* native ...
|
||||
*
|
||||
* |
|
||||
* |
|
||||
* |
|
||||
* +----------------------+--------------------+-----------------------+
|
||||
* | | | |
|
||||
*
|
||||
* apple linux windows androidNative
|
||||
*
|
||||
* |
|
||||
* +-----------+------------+------------+
|
||||
* | | | |
|
||||
*
|
||||
* macos ios tvos watchos
|
||||
* ```
|
||||
*
|
||||
* #### Example 2: Adding custom groups
|
||||
* Let's imagine we would additionally like to share code between linux and apple (unixLike)
|
||||
*
|
||||
* ```kotlin
|
||||
* kotlin {
|
||||
* targets.hierarchy.default { target ->
|
||||
* if(target.isNative) {
|
||||
* group("native") { // <- we can re-declare already existing groups and connect children to it!
|
||||
* if(target.isLinux || target.isApple) {
|
||||
* group("unixLike")
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @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)
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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
|
||||
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
interface KotlinTargetHierarchyBuilder {
|
||||
val target: KotlinTarget
|
||||
val compilation: KotlinCompilation<*>
|
||||
|
||||
val isNative: Boolean
|
||||
val isApple: Boolean
|
||||
val isIos: Boolean
|
||||
val isWatchos: Boolean
|
||||
val isMacos: Boolean
|
||||
val isTvos: Boolean
|
||||
val isWindows: Boolean
|
||||
val isLinux: Boolean
|
||||
val isAndroidNative: Boolean
|
||||
val isJvm: Boolean
|
||||
val isAndroidJvm: Boolean
|
||||
val isJsLegacy: Boolean
|
||||
val isJsIr: Boolean
|
||||
val isJs: Boolean
|
||||
|
||||
fun common(build: KotlinTargetHierarchyBuilder.() -> Unit) = group("common", build)
|
||||
fun group(name: String, build: KotlinTargetHierarchyBuilder.() -> Unit = {})
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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
|
||||
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
interface KotlinTargetHierarchyDescriptor : (KotlinTargetHierarchyBuilder) -> Unit {
|
||||
fun extend(describe: KotlinTargetHierarchyBuilder.() -> Unit): KotlinTargetHierarchyDescriptor
|
||||
}
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
fun KotlinTargetHierarchyDescriptor(
|
||||
describe: KotlinTargetHierarchyBuilder.() -> Unit
|
||||
): KotlinTargetHierarchyDescriptor {
|
||||
return KotlinTargetHierarchyDescriptorImpl(describe)
|
||||
}
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
private class KotlinTargetHierarchyDescriptorImpl(
|
||||
private val describe: KotlinTargetHierarchyBuilder.() -> Unit
|
||||
) : KotlinTargetHierarchyDescriptor {
|
||||
|
||||
override fun extend(describe: KotlinTargetHierarchyBuilder.() -> Unit): KotlinTargetHierarchyDescriptor {
|
||||
val sourceDescribe = this.describe
|
||||
return KotlinTargetHierarchyDescriptor {
|
||||
sourceDescribe()
|
||||
describe()
|
||||
}
|
||||
}
|
||||
|
||||
override fun invoke(p1: KotlinTargetHierarchyBuilder) = p1.describe()
|
||||
}
|
||||
Reference in New Issue
Block a user