[Gradle] Restore 'KotlinTargetHierarchyDsl' for easier transition to hierarchy templates

^KT-60596 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-07-26 14:31:08 +02:00
committed by Space Team
parent e8004a4034
commit 7cef7ac639
7 changed files with 168 additions and 0 deletions
@@ -525,6 +525,17 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinNativeXCFr
public abstract fun targets ([Lorg/jetbrains/kotlin/konan/target/KonanTarget;)V
}
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl {
public abstract fun apply (Lorg/jetbrains/kotlin/gradle/plugin/KotlinHierarchyTemplate;Lkotlin/jvm/functions/Function1;)V
public abstract fun custom (Lkotlin/jvm/functions/Function1;)V
public abstract fun default (Lkotlin/jvm/functions/Function1;)V
}
public final class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl$DefaultImpls {
public static synthetic fun apply$default (Lorg/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl;Lorg/jetbrains/kotlin/gradle/plugin/KotlinHierarchyTemplate;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public static synthetic fun default$default (Lorg/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
}
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTopLevelExtensionConfig {
public abstract fun explicitApi ()V
public abstract fun explicitApiWarning ()V
@@ -0,0 +1,23 @@
/*
* 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.dsl
/*
* 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.
*/
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyBuilder
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyTemplate
@Deprecated("Use 'KotlinHierarchyTemplate' instead")
@ExperimentalKotlinGradlePluginApi
interface KotlinTargetHierarchyDsl {
fun apply(hierarchyDescriptor: KotlinHierarchyTemplate, describeExtension: (KotlinHierarchyBuilder.Root.() -> Unit)? = null)
fun default(describeExtension: (KotlinHierarchyBuilder.Root.() -> Unit)? = null)
fun custom(describe: KotlinHierarchyBuilder.Root.() -> Unit)
}
@@ -88,6 +88,15 @@ internal class KotlinHierarchyTemplateImpl(
fun layout(builder: KotlinHierarchyBuilder.Root) {
describe(builder)
}
override fun hashCode(): Int {
return describe.hashCode()
}
override fun equals(other: Any?): Boolean {
if (other !is KotlinHierarchyTemplateImpl) return false
return this.describe == other.describe
}
}
/*
@@ -30,6 +30,7 @@ public abstract class org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensi
public fun androidTarget (Ljava/lang/String;Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinAndroidTarget;
public fun androidTarget (Lorg/gradle/api/Action;)Lorg/jetbrains/kotlin/gradle/plugin/mpp/KotlinAndroidTarget;
public final fun applyDefaultHierarchyTemplate ()V
public final fun applyDefaultHierarchyTemplate (Lkotlin/jvm/functions/Function1;)V
public fun applyHierarchyTemplate (Lkotlin/jvm/functions/Function1;)V
public fun applyHierarchyTemplate (Lorg/jetbrains/kotlin/gradle/plugin/KotlinHierarchyTemplate;)V
public fun applyHierarchyTemplate (Lorg/jetbrains/kotlin/gradle/plugin/KotlinHierarchyTemplate;Lkotlin/jvm/functions/Function1;)V
@@ -61,6 +62,7 @@ public abstract class org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensi
public fun getNativeMain (Lorg/gradle/api/NamedDomainObjectContainer;)Lorg/gradle/api/NamedDomainObjectProvider;
public fun getNativeTest (Lorg/gradle/api/NamedDomainObjectContainer;)Lorg/gradle/api/NamedDomainObjectProvider;
public fun getPresets ()Lorg/gradle/api/NamedDomainObjectCollection;
public final fun getTargetHierarchy ()Lorg/jetbrains/kotlin/gradle/dsl/DeprecatedKotlinTargetHierarchyDsl;
public final fun getTargets ()Lorg/gradle/api/NamedDomainObjectCollection;
public final fun getTestableTargets ()Lorg/gradle/api/NamedDomainObjectCollection;
public fun getTvosMain (Lorg/gradle/api/NamedDomainObjectContainer;)Lorg/gradle/api/NamedDomainObjectProvider;
@@ -0,0 +1,34 @@
/*
* 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.
*/
@file:Suppress("DEPRECATION")
package org.jetbrains.kotlin.gradle.dsl
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyBuilder
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyTemplate
@Deprecated("Use 'KotlinHierarchyTemplate's instead.")
class DeprecatedKotlinTargetHierarchyDsl internal constructor(
private val extension: KotlinMultiplatformExtension,
) : KotlinTargetHierarchyDsl {
@Deprecated("Replace with 'kotlin.applyHierarchyTemplate'")
override fun apply(hierarchyDescriptor: KotlinHierarchyTemplate, describeExtension: (KotlinHierarchyBuilder.Root.() -> Unit)?) {
if (describeExtension != null) extension.applyHierarchyTemplate(hierarchyDescriptor, describeExtension)
else extension.applyHierarchyTemplate(hierarchyDescriptor)
}
@Deprecated("Replace with 'kotlin.applyDefaultHierarchyTemplate'")
override fun default(describeExtension: (KotlinHierarchyBuilder.Root.() -> Unit)?) {
if (describeExtension != null) extension.applyDefaultHierarchyTemplate(describeExtension)
else extension.applyDefaultHierarchyTemplate()
}
@Deprecated("Replace with 'kotlin.applyHierarchyTemplate'")
override fun custom(describe: KotlinHierarchyBuilder.Root.() -> Unit) {
extension.applyHierarchyTemplate(describe)
}
}
@@ -104,6 +104,16 @@ abstract class KotlinMultiplatformExtension
*/
fun applyDefaultHierarchyTemplate() = applyHierarchyTemplate(KotlinHierarchyTemplate.default)
/**
* @see applyDefaultHierarchyTemplate
* @see applyHierarchyTemplate
* @param extension: Additionally extend the default hierarchy with additional groups
*
*/
@ExperimentalKotlinGradlePluginApi
fun applyDefaultHierarchyTemplate(extension: KotlinHierarchyBuilder.Root.() -> Unit) {
hierarchy.applyHierarchyTemplate(KotlinHierarchyTemplate.default, extension)
}
@ExperimentalKotlinGradlePluginApi
override fun applyHierarchyTemplate(template: KotlinHierarchyTemplate) {
@@ -120,6 +130,9 @@ abstract class KotlinMultiplatformExtension
hierarchy.applyHierarchyTemplate(template)
}
@ExperimentalKotlinGradlePluginApi
val targetHierarchy: DeprecatedKotlinTargetHierarchyDsl get() = DeprecatedKotlinTargetHierarchyDsl(this)
@Suppress("unused") // DSL
val testableTargets: NamedDomainObjectCollection<KotlinTargetWithTests<*, *>>
get() = targets.withType(KotlinTargetWithTests::class.java)
@@ -0,0 +1,76 @@
/*
* 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.
*/
@file:Suppress("FunctionName", "DEPRECATION")
package org.jetbrains.kotlin.gradle.unitTests
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyBuilder
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.fail
/**
* Test will check that the deprecated 'KotlinTargetHierarchyDsl' will act exactly the same as the new
* 'KotlinHierarchyDsl'
*/
class DeprecatedKotlinTargetHierarchyDslTest {
val legacyProject = buildProjectWithMPP()
val project = buildProjectWithMPP()
@Test
fun `test - default`() {
legacyProject.multiplatformExtension.targetHierarchy.default()
project.multiplatformExtension.applyDefaultHierarchyTemplate()
assertEquals(
project.multiplatformExtension.hierarchy.appliedTemplates,
legacyProject.multiplatformExtension.hierarchy.appliedTemplates
)
}
@Test
fun `test - default with extension`() {
val extension: KotlinHierarchyBuilder.Root.() -> Unit = {
common {
group("nix") {
withLinux()
withMacos()
}
}
}
legacyProject.multiplatformExtension.targetHierarchy.default(extension)
project.multiplatformExtension.applyDefaultHierarchyTemplate(extension)
listOf(legacyProject, project).forEach { project ->
project.multiplatformExtension.jvm()
project.multiplatformExtension.linuxX64()
project.multiplatformExtension.macosX64()
project.evaluate()
if ("nativeMain" !in project.multiplatformExtension.sourceSets.names)
fail("Expected 'nativeMain' in source sets")
if ("nixMain" !in project.multiplatformExtension.sourceSets.names) {
fail("Expected 'nixMain' in source sets")
}
}
}
@Test
fun `test - custom`() {
val description: KotlinHierarchyBuilder.Root.() -> Unit = { /* Does not matter */ }
legacyProject.multiplatformExtension.targetHierarchy.custom(description)
project.multiplatformExtension.applyHierarchyTemplate(description)
assertEquals(
project.multiplatformExtension.hierarchy.appliedTemplates,
legacyProject.multiplatformExtension.hierarchy.appliedTemplates
)
}
}