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