From 2af60a5e279338e5b0c44b45ef6c8c8eb06027e2 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 18 Dec 2023 22:11:42 +0100 Subject: [PATCH] [Gradle] Add deprecated access to sourceSets container inside KotlinTarget This should keep compatability with user scripts that for any reason tried to configure 'sourceSets' container inside KotlinTarget, but keep such users warned. ^KT-57292 In Progress --- .../api/kotlin-gradle-plugin-api.api | 1 + .../kotlin/gradle/plugin/KotlinTarget.kt | 8 ++++++- .../api/kotlin-gradle-plugin.api | 1 + .../gradle/plugin/mpp/InternalKotlinTarget.kt | 14 +++++++++++-- .../unitTests/InternalKotlinTargetTest.kt | 21 +++++++++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index ac9db54acde..2d6167b4caf 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -1161,6 +1161,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTarget public abstract fun getPreset ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetPreset; public abstract fun getPublishable ()Z public abstract fun getRuntimeElementsConfigurationName ()Ljava/lang/String; + public abstract fun getSourceSets ()Lorg/gradle/api/NamedDomainObjectContainer; public abstract fun getSourcesElementsConfigurationName ()Ljava/lang/String; public abstract fun getTargetName ()Ljava/lang/String; public abstract fun getUseDisambiguationClassifierAsSourceSetNamePrefix ()Z diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt index 4027c14dfb2..e1b3f6b58d5 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt @@ -17,7 +17,6 @@ import org.gradle.api.publish.maven.MavenPublication import org.jetbrains.kotlin.gradle.PRESETS_API_IS_DEPRECATED_MESSAGE import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated import org.jetbrains.kotlin.gradle.dsl.KotlinGradlePluginDsl @@ -81,6 +80,13 @@ interface KotlinTarget : Named, HasAttributes, HasProject, HasMutableExtras { fun compilerOptions(configure: Action) { throw UnsupportedOperationException("Kotlin target level compiler options DSL is not available in this release!") } + + @Deprecated( + "Accessing 'sourceSets' container on the Kotlin target level DSL is deprecated. " + + "Consider configuring 'sourceSets' on the Kotlin extension level.", + level = DeprecationLevel.WARNING + ) + val sourceSets: NamedDomainObjectContainer } interface KotlinTargetWithTests> : KotlinTarget { diff --git a/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api b/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api index c13c1ca00aa..736c8af1fc2 100644 --- a/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api +++ b/libraries/tools/kotlin-gradle-plugin/api/kotlin-gradle-plugin.api @@ -768,6 +768,7 @@ public class org/jetbrains/kotlin/gradle/plugin/mpp/external/DecoratedExternalKo public final fun getRuntimeElementsConfiguration ()Lorg/gradle/api/artifacts/Configuration; public fun getRuntimeElementsConfigurationName ()Ljava/lang/String; public final fun getRuntimeElementsPublishedConfiguration ()Lorg/gradle/api/artifacts/Configuration; + public fun getSourceSets ()Lorg/gradle/api/NamedDomainObjectContainer; public final fun getSourcesElementsConfiguration ()Lorg/gradle/api/artifacts/Configuration; public fun getSourcesElementsConfigurationName ()Ljava/lang/String; public final fun getSourcesElementsPublishedConfiguration ()Lorg/gradle/api/artifacts/Configuration; diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget.kt index 6669083da1b..479b13700ae 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/InternalKotlinTarget.kt @@ -5,16 +5,18 @@ package org.jetbrains.kotlin.gradle.plugin.mpp +import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.publish.maven.MavenPublication import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent import org.jetbrains.kotlin.gradle.plugin.await import org.jetbrains.kotlin.gradle.plugin.mpp.external.DecoratedExternalKotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.external.ExternalKotlinTargetImpl import org.jetbrains.kotlin.gradle.utils.extrasStoredFuture +import org.jetbrains.kotlin.gradle.utils.getByType import org.jetbrains.kotlin.tooling.core.HasMutableExtras internal interface InternalKotlinTarget : KotlinTarget, HasMutableExtras { @@ -24,6 +26,14 @@ internal interface InternalKotlinTarget : KotlinTarget, HasMutableExtras { @InternalKotlinGradlePluginApi override val components: Set fun onPublicationCreated(publication: MavenPublication) + + @Deprecated( + "Accessing 'sourceSets' container on the Kotlin target level DSL is deprecated. " + + "Consider configuring 'sourceSets' on the Kotlin extension level.", + level = DeprecationLevel.WARNING + ) + override val sourceSets: NamedDomainObjectContainer + get() = project.extensions.getByType().sourceSets } internal val KotlinTarget.internal: InternalKotlinTarget diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/InternalKotlinTargetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/InternalKotlinTargetTest.kt index bf29197704f..73fd5237fb3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/InternalKotlinTargetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/InternalKotlinTargetTest.kt @@ -7,14 +7,35 @@ package org.jetbrains.kotlin.gradle.unitTests +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.InternalKotlinTarget import org.jetbrains.kotlin.gradle.util.assertAllImplementationsAlsoImplement +import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP +import org.jetbrains.kotlin.gradle.util.kotlin import kotlin.test.Test +import kotlin.test.assertEquals class InternalKotlinTargetTest { @Test fun `test - all implementations of KotlinTarget - implement InternalKotlinTarget`() { assertAllImplementationsAlsoImplement(KotlinTarget::class, InternalKotlinTarget::class) } + + @Test + fun `KotlinTarget sourceSets are equal to extension sourceSets`() { + val project = buildProjectWithMPP { + kotlin { + jvm() + } + } + + project.evaluate() + + @Suppress("DEPRECATION") + assertEquals( + project.multiplatformExtension.sourceSets, + project.multiplatformExtension.jvm().sourceSets + ) + } } \ No newline at end of file