[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
This commit is contained in:
Yahor Berdnikau
2023-12-18 22:11:42 +01:00
committed by Space Team
parent 36e85fec95
commit 2af60a5e27
5 changed files with 42 additions and 3 deletions
@@ -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
@@ -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<KotlinCommonCompilerOptions>) {
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<KotlinSourceSet>
}
interface KotlinTargetWithTests<E : KotlinExecution.ExecutionSource, T : KotlinTargetTestRun<E>> : KotlinTarget {
@@ -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;
@@ -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<KotlinTargetSoftwareComponent>
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<KotlinSourceSet>
get() = project.extensions.getByType<KotlinProjectExtension>().sourceSets
}
internal val KotlinTarget.internal: InternalKotlinTarget
@@ -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
)
}
}