From 969deb639c26673346bcf05f4d2658048cf8007a Mon Sep 17 00:00:00 2001 From: Timofey Solonin Date: Fri, 21 Jul 2023 10:19:53 +0200 Subject: [PATCH] [MPP] Deprecate preset APIs ^KT-59321 --- .../api/kotlin-gradle-plugin-annotations.api | 5 + .../gradle/DeprecatedTargetPresetApi.kt | 17 +++ .../kotlin/gradle/plugin/KotlinTarget.kt | 12 +- .../gradle/plugin/KotlinTargetPreset.kt | 9 ++ .../gradle/plugin/KotlinTargetsContainer.kt | 9 ++ .../gradle/dsl/mppPresetFunctionsCodegen.kt | 11 +- .../gradle/testbase/diagnosticsAssertions.kt | 1 - .../kotlin-gradle-plugin/build.gradle.kts | 1 + .../dsl/KotlinMultiplatformExtension.kt | 117 ++++++++++++++++-- ...MultiplatformExtensionTargetFromPresets.kt | 32 +++++ .../gradle/dsl/KotlinProjectExtension.kt | 6 +- ...linTargetContainerWithJsPresetFunctions.kt | 3 +- ...otlinTargetContainerWithPresetFunctions.kt | 30 +++++ ...nTargetContainerWithWasmPresetFunctions.kt | 1 + .../diagnostics/KotlinToolingDiagnostics.kt | 18 +++ .../KotlinTargetAlreadyDeclaredChecker.kt | 6 +- .../gradle/plugin/mpp/AbstractKotlinTarget.kt | 11 ++ .../plugin/mpp/KotlinMultiplatformPlugin.kt | 7 +- .../mpp/external/ExternalKotlinTargetImpl.kt | 2 + .../gradle/plugin/mpp/kotlinTargetPresets.kt | 10 +- .../android/KotlinAndroidTargetPreset.kt | 6 +- .../internal/InternalKotlinTargetPreset.kt | 25 ++++ .../targets/js/ir/KotlinJsIrTargetPreset.kt | 3 + .../targets/js/ir/KotlinWasmTargetPreset.kt | 7 +- .../targets/jvm/KotlinJvmTargetPreset.kt | 2 + .../jvm/KotlinJvmWithJavaTargetPreset.kt | 4 +- .../metadata/KotlinMetadataTargetPreset.kt | 6 +- .../native/KotlinNativeTargetPreset.kt | 8 +- .../regressionTests/ConfigurationsTest.kt | 1 + .../unitTests/KotlinHierarchyBuilderTest.kt | 1 + .../MppDiagnosticsFunctionalTest.kt | 4 +- .../TargetPresetDeprecationTest.kt | 2 +- 32 files changed, 338 insertions(+), 39 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-annotations/src/main/kotlin/org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApi.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensionTargetFromPresets.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/InternalKotlinTargetPreset.kt diff --git a/libraries/tools/kotlin-gradle-plugin-annotations/api/kotlin-gradle-plugin-annotations.api b/libraries/tools/kotlin-gradle-plugin-annotations/api/kotlin-gradle-plugin-annotations.api index dfa02e600e3..f06ca422ba2 100644 --- a/libraries/tools/kotlin-gradle-plugin-annotations/api/kotlin-gradle-plugin-annotations.api +++ b/libraries/tools/kotlin-gradle-plugin-annotations/api/kotlin-gradle-plugin-annotations.api @@ -1,3 +1,8 @@ +public final class org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApiKt { + public static final field PRESETS_API_IS_DEPRECATED_MESSAGE Ljava/lang/String; + public static final field PRESETS_DEPRECATION_MESSAGE_SUFFIX Ljava/lang/String; +} + public abstract interface annotation class org/jetbrains/kotlin/gradle/ExperimentalKotlinGradlePluginApi : java/lang/annotation/Annotation { } diff --git a/libraries/tools/kotlin-gradle-plugin-annotations/src/main/kotlin/org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApi.kt b/libraries/tools/kotlin-gradle-plugin-annotations/src/main/kotlin/org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApi.kt new file mode 100644 index 00000000000..1bdae00df53 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-annotations/src/main/kotlin/org/jetbrains/kotlin/gradle/DeprecatedTargetPresetApi.kt @@ -0,0 +1,17 @@ +/* + * 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 + +const val PRESETS_DEPRECATION_MESSAGE_SUFFIX = + "API is deprecated and will be removed in future releases. Learn how to configure targets at: https://kotl.in/target-configuration" +const val PRESETS_API_IS_DEPRECATED_MESSAGE = "The presets $PRESETS_DEPRECATION_MESSAGE_SUFFIX" + +@RequiresOptIn( + message = PRESETS_API_IS_DEPRECATED_MESSAGE, + level = RequiresOptIn.Level.WARNING +) +@InternalKotlinGradlePluginApi +annotation class DeprecatedTargetPresetApi \ No newline at end of file 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 38c54e63db0..36365693da9 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 @@ -10,11 +10,13 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Action import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer -import org.gradle.api.Project import org.gradle.api.attributes.AttributeContainer import org.gradle.api.attributes.HasAttributes import org.gradle.api.component.SoftwareComponent 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.dsl.KotlinCommonOptionsDeprecated import org.jetbrains.kotlin.tooling.core.HasMutableExtras @@ -52,8 +54,16 @@ interface KotlinTarget : Named, HasAttributes, HasProject, HasMutableExtras { fun attributes(configure: AttributeContainer.() -> Unit) = attributes.configure() fun attributes(configure: Action) = attributes { configure.execute(this) } + @OptIn(DeprecatedTargetPresetApi::class, InternalKotlinGradlePluginApi::class) + @Deprecated( + PRESETS_API_IS_DEPRECATED_MESSAGE, + level = DeprecationLevel.WARNING, + ) val preset: KotlinTargetPreset? + @InternalKotlinGradlePluginApi + fun warnAboutCreationOfTargetFromPreset() + override fun getName(): String = targetName } diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetPreset.kt index afc460dd8a0..8e8a6dae848 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetPreset.kt @@ -6,7 +6,16 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Named +import org.jetbrains.kotlin.gradle.PRESETS_DEPRECATION_MESSAGE_SUFFIX +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi +import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi +@OptIn(InternalKotlinGradlePluginApi::class) +@DeprecatedTargetPresetApi interface KotlinTargetPreset : Named { + @Deprecated( + "The KotlinTargetPreset.createTarget() $PRESETS_DEPRECATION_MESSAGE_SUFFIX", + level = DeprecationLevel.WARNING, + ) fun createTarget(name: String): T } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetsContainer.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetsContainer.kt index e9ed625c32e..80764d7cf5e 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetsContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetsContainer.kt @@ -7,13 +7,22 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.NamedDomainObjectCollection import org.gradle.api.NamedDomainObjectContainer +import org.jetbrains.kotlin.gradle.PRESETS_API_IS_DEPRECATED_MESSAGE +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi +import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi @KotlinTargetsDsl interface KotlinTargetsContainer { val targets: NamedDomainObjectCollection } +@OptIn(InternalKotlinGradlePluginApi::class) +@DeprecatedTargetPresetApi interface KotlinTargetsContainerWithPresets : KotlinTargetsContainer { + @Deprecated( + PRESETS_API_IS_DEPRECATED_MESSAGE, + level = DeprecationLevel.WARNING, + ) val presets: NamedDomainObjectCollection> } diff --git a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt index de8f56ae763..6261a88aec9 100644 --- a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt +++ b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/mppPresetFunctionsCodegen.kt @@ -3,10 +3,15 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +@file:OptIn(DeprecatedTargetPresetApi::class, InternalKotlinGradlePluginApi::class) +@file:Suppress("DEPRECATION") + package org.jetbrains.kotlin.generators.gradle.dsl +import org.jetbrains.kotlin.gradle.plugin.* import org.gradle.api.Action -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi +import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi import java.io.File fun main() { @@ -89,6 +94,9 @@ private fun generatePresetFunctions( "" } + // Suppress presets deprecation to prevent warnings inside kotlin-gradle-plugin + val suppressPresetsDeprecation = "@Suppress(\"DEPRECATION\")" + val alsoBlockAfterConfiguration = if (presetEntry.alsoBlockAfterConfiguration != null) { """ .also { @@ -109,6 +117,7 @@ private fun generatePresetFunctions( ): ${presetEntry.targetType.renderShort()} = $configureOrCreateFunctionName( name, + ${suppressPresetsDeprecation} $getPresetsExpression.getByName("$entityName") as ${presetEntry.presetType.renderShort()}, configure )$alsoBlockAfterConfiguration diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/diagnosticsAssertions.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/diagnosticsAssertions.kt index 3bd61bee4d9..b8723c410d4 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/diagnosticsAssertions.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/diagnosticsAssertions.kt @@ -9,7 +9,6 @@ import org.gradle.testkit.runner.BuildResult import org.jetbrains.kotlin.gradle.BaseGradleIT import org.jetbrains.kotlin.gradle.internals.VERBOSE_DIAGNOSTIC_SEPARATOR import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnosticFactory -import kotlin.test.assertEquals import kotlin.test.assertNull import kotlin.test.assertTrue diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index 12e89fdc034..e5f409683c6 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -30,6 +30,7 @@ kotlin { "org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi", "org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi", "org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi", + "org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi", ) ) suppressWarnings = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index 29b97f7caf9..f43c48a598a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -11,8 +11,12 @@ import org.gradle.api.NamedDomainObjectCollection import org.gradle.api.Project import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.PRESETS_API_IS_DEPRECATED_MESSAGE +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterFinaliseDsl +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics +import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinHierarchyDslImpl import org.jetbrains.kotlin.gradle.plugin.mpp.* @@ -29,6 +33,10 @@ abstract class KotlinMultiplatformExtension KotlinTargetContainerWithNativeShortcuts, KotlinHierarchyDsl, KotlinMultiplatformSourceSetConventions by KotlinMultiplatformSourceSetConventionsImpl { + @Deprecated( + PRESETS_API_IS_DEPRECATED_MESSAGE, + level = DeprecationLevel.WARNING, + ) override val presets: NamedDomainObjectCollection> = project.container(KotlinTargetPreset::class.java) final override val targets: NamedDomainObjectCollection = project.container(KotlinTarget::class.java) @@ -43,7 +51,8 @@ abstract class KotlinMultiplatformExtension private val presetExtension = project.objects.newInstance( DefaultTargetsFromPresetExtension::class.java, { this }, - targets + targets, + project, ) fun targets(configure: Action) { @@ -147,42 +156,117 @@ abstract class KotlinMultiplatformExtension targets.all { it.withSourcesJar(publish) } } + private fun warnAboutTargetFromPresetDeprecation() { + project.reportDiagnostic(KotlinToolingDiagnostics.TargetFromPreset()) + } + + @DeprecatedTargetPresetApi + @Deprecated( + KotlinToolingDiagnostics.TargetFromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING + ) fun targetFromPreset( preset: KotlinTargetPreset, name: String = preset.name, configure: T.() -> Unit = { }, - ): T = configureOrCreate(name, preset, configure) + ): T { + warnAboutTargetFromPresetDeprecation() + return targetFromPresetInternal( + preset = preset, + name = name, + configure = configure, + ) + } + @DeprecatedTargetPresetApi + @Deprecated( + KotlinToolingDiagnostics.TargetFromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING + ) fun targetFromPreset( preset: KotlinTargetPreset, name: String, configure: Action, - ) = targetFromPreset(preset, name) { configure.execute(this) } + ): T { + warnAboutTargetFromPresetDeprecation() + return targetFromPresetInternal( + preset = preset, + name = name, + configure = configure, + ) + } - fun targetFromPreset(preset: KotlinTargetPreset) = targetFromPreset(preset, preset.name) { } - fun targetFromPreset(preset: KotlinTargetPreset, name: String) = targetFromPreset(preset, name) { } - fun targetFromPreset(preset: KotlinTargetPreset, configure: Action) = - targetFromPreset(preset, preset.name, configure) + @DeprecatedTargetPresetApi + @Deprecated( + KotlinToolingDiagnostics.TargetFromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING + ) + fun targetFromPreset(preset: KotlinTargetPreset): T { + warnAboutTargetFromPresetDeprecation() + return targetFromPresetInternal( + preset = preset + ) + } + + @DeprecatedTargetPresetApi + @Deprecated( + KotlinToolingDiagnostics.TargetFromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING + ) + fun targetFromPreset(preset: KotlinTargetPreset, name: String): T { + warnAboutTargetFromPresetDeprecation() + return targetFromPresetInternal( + preset = preset, + name = name + ) + } + + @DeprecatedTargetPresetApi + @Deprecated( + KotlinToolingDiagnostics.TargetFromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING + ) + fun targetFromPreset(preset: KotlinTargetPreset, configure: Action): T { + warnAboutTargetFromPresetDeprecation() + return targetFromPresetInternal( + preset = preset, + configure = configure + ) + } internal val rootSoftwareComponent: KotlinSoftwareComponent by lazy { KotlinSoftwareComponentWithCoordinatesAndPublication(project, "kotlin", targets) } } +@DeprecatedTargetPresetApi @KotlinGradlePluginDsl interface TargetsFromPresetExtension : NamedDomainObjectCollection { + @Deprecated( + KotlinToolingDiagnostics.FromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING, + ) fun fromPreset( preset: KotlinTargetPreset, name: String, configureAction: T.() -> Unit = {}, ): T + @Suppress("DeprecatedCallableAddReplaceWith", "DEPRECATION") + @Deprecated( + KotlinToolingDiagnostics.FromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING, + ) fun fromPreset( preset: KotlinTargetPreset, name: String, - ): T = fromPreset(preset, name, {}) + ): T = fromPreset(preset, name) {} + @Deprecated( + KotlinToolingDiagnostics.FromPreset.DEPRECATION_MESSAGE, + level = DeprecationLevel.WARNING, + ) fun fromPreset( preset: KotlinTargetPreset, name: String, @@ -190,18 +274,28 @@ interface TargetsFromPresetExtension : NamedDomainObjectCollection ): T } +@Suppress("OVERRIDE_DEPRECATION") internal abstract class DefaultTargetsFromPresetExtension @Inject constructor( private val targetsContainer: () -> KotlinTargetsContainerWithPresets, val targets: NamedDomainObjectCollection, + val project: Project, ) : TargetsFromPresetExtension, NamedDomainObjectCollection by targets { + private fun warnAboutFromPresetDeprecation() { + project.reportDiagnostic(KotlinToolingDiagnostics.FromPreset()) + } + override fun fromPreset( preset: KotlinTargetPreset, name: String, configureAction: T.() -> Unit, - ): T = targetsContainer().configureOrCreate(name, preset, configureAction) + ): T { + warnAboutFromPresetDeprecation() + return targetsContainer().configureOrCreate(name, preset, configureAction) + } + @Suppress("DEPRECATION") override fun fromPreset( preset: KotlinTargetPreset, name: String, @@ -211,6 +305,7 @@ internal abstract class DefaultTargetsFromPresetExtension @Inject constructor( } } +@Suppress("DEPRECATION") private fun KotlinTarget.isProducedFromPreset(kotlinTargetPreset: KotlinTargetPreset<*>): Boolean = preset == kotlinTargetPreset @@ -228,13 +323,14 @@ internal fun KotlinTargetsContainerWithPresets.configureOrCre } existingTarget == null -> { - val newTarget = targetPreset.createTarget(targetName) + val newTarget = targetPreset.createTargetInternal(targetName) targets.add(newTarget) configure(newTarget) return newTarget } else -> { + @Suppress("DEPRECATION") throw InvalidUserCodeException( "The target '$targetName' already exists, but it was not created with the '${targetPreset.name}' preset. " + "To configure it, access it by name in `kotlin.targets`" + @@ -244,4 +340,3 @@ internal fun KotlinTargetsContainerWithPresets.configureOrCre } } } - diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensionTargetFromPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensionTargetFromPresets.kt new file mode 100644 index 00000000000..a5b8505bf80 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensionTargetFromPresets.kt @@ -0,0 +1,32 @@ +/* + * 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 + +import org.gradle.api.Action +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset +import org.jetbrains.kotlin.gradle.targets.android.internal.internal + +internal fun KotlinMultiplatformExtension.targetFromPresetInternal( + preset: KotlinTargetPreset, + name: String = preset.name, + configure: T.() -> Unit = { }, +): T = configureOrCreate(name, preset.internal, configure) + +internal fun KotlinMultiplatformExtension.targetFromPresetInternal( + preset: KotlinTargetPreset, + name: String, + configure: Action, +) = targetFromPresetInternal(preset, name) { configure.execute(this) } + +internal fun KotlinMultiplatformExtension.targetFromPresetInternal(preset: KotlinTargetPreset) = + targetFromPresetInternal(preset, preset.name) { } + +internal fun KotlinMultiplatformExtension.targetFromPresetInternal(preset: KotlinTargetPreset, name: String) = + targetFromPresetInternal(preset, name) { } + +internal fun KotlinMultiplatformExtension.targetFromPresetInternal(preset: KotlinTargetPreset, configure: Action) = + targetFromPresetInternal(preset, preset.name, configure) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt index ba4a085f02e..3f84652ef25 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension.kt @@ -318,20 +318,20 @@ abstract class KotlinJsProjectExtension(project: Project) : .also { it.irPreset = null } - .createTarget("js") + .createTargetInternal("js") KotlinJsCompilerType.IR -> irPreset .also { it.mixedMode = false } - .createTarget("js") + .createTargetInternal("js") KotlinJsCompilerType.BOTH -> legacyPreset .also { irPreset.mixedMode = true it.irPreset = irPreset } - .createTarget( + .createTargetInternal( lowerCamelCaseName( "js", LEGACY.lowerName diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithJsPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithJsPresetFunctions.kt index 85b6506abe5..b9293b038f9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithJsPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithJsPresetFunctions.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.dsl import org.gradle.api.Action import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension.Companion.warnAboutDeprecatedCompiler import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.targets.android.internal.InternalKotlinTargetPreset import org.jetbrains.kotlin.gradle.targets.js.calculateJsCompilerType import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -100,7 +101,7 @@ private fun KotlinTargetContainerWithJsPresetFunctions.jsInternal( } } - @Suppress("UNCHECKED_CAST") + @Suppress("UNCHECKED_CAST", "DEPRECATION") return configureOrCreate( targetName, presets.getByName( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt index 1b12b7380de..56a9f6ba54d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt @@ -27,6 +27,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinJvmTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("jvm") as KotlinJvmTargetPreset, configure ) @@ -42,6 +43,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinAndroidTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("android") as KotlinAndroidTargetPreset, configure ) @@ -59,6 +61,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinAndroidTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("android") as KotlinAndroidTargetPreset, configure ).also { @@ -93,6 +96,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("androidNativeX64") as KotlinNativeTargetPreset, configure ) @@ -108,6 +112,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("androidNativeX86") as KotlinNativeTargetPreset, configure ) @@ -123,6 +128,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("androidNativeArm32") as KotlinNativeTargetPreset, configure ) @@ -138,6 +144,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("androidNativeArm64") as KotlinNativeTargetPreset, configure ) @@ -155,6 +162,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("iosArm32") as KotlinNativeTargetPreset, configure ) @@ -182,6 +190,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("iosArm64") as KotlinNativeTargetPreset, configure ) @@ -197,6 +206,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("iosX64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -212,6 +222,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("iosSimulatorArm64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -227,6 +238,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosArm32") as KotlinNativeTargetPreset, configure ) @@ -242,6 +254,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosArm64") as KotlinNativeTargetPreset, configure ) @@ -259,6 +272,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosX86") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -286,6 +300,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosX64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -301,6 +316,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosSimulatorArm64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -316,6 +332,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("watchosDeviceArm64") as KotlinNativeTargetPreset, configure ) @@ -331,6 +348,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("tvosArm64") as KotlinNativeTargetPreset, configure ) @@ -346,6 +364,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("tvosX64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -361,6 +380,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("tvosSimulatorArm64") as KotlinNativeTargetWithSimulatorTestsPreset, configure ) @@ -376,6 +396,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithHostTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("linuxX64") as KotlinNativeTargetWithHostTestsPreset, configure ) @@ -393,6 +414,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("mingwX86") as KotlinNativeTargetPreset, configure ) @@ -420,6 +442,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithHostTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("mingwX64") as KotlinNativeTargetWithHostTestsPreset, configure ) @@ -435,6 +458,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithHostTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("macosX64") as KotlinNativeTargetWithHostTestsPreset, configure ) @@ -450,6 +474,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTargetWithHostTests = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("macosArm64") as KotlinNativeTargetWithHostTestsPreset, configure ) @@ -465,6 +490,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("linuxArm64") as KotlinNativeTargetPreset, configure ) @@ -482,6 +508,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("linuxArm32Hfp") as KotlinNativeTargetPreset, configure ) @@ -511,6 +538,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("linuxMips32") as KotlinNativeTargetPreset, configure ) @@ -540,6 +568,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("linuxMipsel32") as KotlinNativeTargetPreset, configure ) @@ -569,6 +598,7 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP ): KotlinNativeTarget = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("wasm32") as KotlinNativeTargetPreset, configure ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions.kt index d0ebee14b3a..24382f01666 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithWasmPresetFunctions.kt @@ -20,6 +20,7 @@ interface KotlinTargetContainerWithWasmPresetFunctions : KotlinTargetContainerWi ): KotlinJsTargetDsl = configureOrCreate( name, + @Suppress("DEPRECATION") presets.getByName("wasm") as KotlinWasmTargetPreset, configure ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt index b8eb7cb7709..7bb20954349 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.diagnostics import org.gradle.api.Project import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.PRESETS_DEPRECATION_MESSAGE_SUFFIX import org.jetbrains.kotlin.gradle.dsl.KotlinSourceSetConvention.isRegisteredByKotlinSourceSetConventionAt import org.jetbrains.kotlin.gradle.dsl.NativeTargetShortcutTrace import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet @@ -536,6 +537,23 @@ object KotlinToolingDiagnostics { ) } + private val presetsDeprecationSeverity = ToolingDiagnostic.Severity.WARNING + + object TargetFromPreset : ToolingDiagnosticFactory(presetsDeprecationSeverity) { + const val DEPRECATION_MESSAGE = "The targetFromPreset() $PRESETS_DEPRECATION_MESSAGE_SUFFIX" + operator fun invoke() = build(DEPRECATION_MESSAGE) + } + + object FromPreset : ToolingDiagnosticFactory(presetsDeprecationSeverity) { + const val DEPRECATION_MESSAGE = "The fromPreset() $PRESETS_DEPRECATION_MESSAGE_SUFFIX" + operator fun invoke() = build(DEPRECATION_MESSAGE) + } + + object CreateTarget : ToolingDiagnosticFactory(presetsDeprecationSeverity) { + const val DEPRECATION_MESSAGE = "The KotlinTargetPreset.createTarget() $PRESETS_DEPRECATION_MESSAGE_SUFFIX" + operator fun invoke() = build(DEPRECATION_MESSAGE) + } + object JvmWithJavaIsIncompatibleWithAndroid : ToolingDiagnosticFactory(FATAL) { operator fun invoke(androidPluginId: String, trace: Throwable?) = build( """ diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/KotlinTargetAlreadyDeclaredChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/KotlinTargetAlreadyDeclaredChecker.kt index 7fe8153cca8..792b911a8e9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/KotlinTargetAlreadyDeclaredChecker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/KotlinTargetAlreadyDeclaredChecker.kt @@ -20,7 +20,10 @@ internal object KotlinTargetAlreadyDeclaredChecker : KotlinGradleProjectChecker val targets = multiplatformExtension?.awaitTargets() ?: return val duplicatedTargets = targets .filter { it !is KotlinMetadataTarget } - .groupBy { it.preset?.name } + .groupBy { + @Suppress("DEPRECATION") + it.preset?.name + } .filterValues { it.size > 1 } for (targetsGroup in duplicatedTargets.values) { @@ -36,6 +39,7 @@ internal object KotlinTargetAlreadyDeclaredChecker : KotlinGradleProjectChecker /** * DSL names are taken from [org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions] */ + @Suppress("DEPRECATION") private val KotlinTarget.targetDslFunctionName get() = when (preset) { is KotlinJsIrTargetPreset -> "js" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt index 3e1ced53b90..d5e5895453b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/AbstractKotlinTarget.kt @@ -18,6 +18,8 @@ import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.publish.maven.MavenPublication import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.PRESETS_API_IS_DEPRECATED_MESSAGE +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* @@ -179,8 +181,17 @@ abstract class AbstractKotlinTarget( publicationConfigureActions.all { action -> action.execute(publication) } } + @OptIn(DeprecatedTargetPresetApi::class) + @Deprecated( + PRESETS_API_IS_DEPRECATED_MESSAGE, + level = DeprecationLevel.WARNING, + ) override var preset: KotlinTargetPreset? = null internal set + + override fun warnAboutCreationOfTargetFromPreset() { + project.reportDiagnostic(KotlinToolingDiagnostics.CreateTarget()) + } } private val publishedConfigurationNameSuffix = "-published" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index b74d8f4d72e..9610bc59fc0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -9,9 +9,8 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.gradle.util.GradleVersion -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.dsl.explicitApiModeAsCompilerArg -import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies import org.jetbrains.kotlin.gradle.plugin.* @@ -33,7 +32,6 @@ import org.jetbrains.kotlin.gradle.targets.native.createFatFrameworks import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.registerKotlinArtifactsExtension import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility -import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget.* import org.jetbrains.kotlin.konan.target.presetName @@ -55,7 +53,7 @@ class KotlinMultiplatformPlugin : Plugin { setupTargetsBuildStatsReport(project) // set up metadata publishing - kotlinMultiplatformExtension.targetFromPreset( + kotlinMultiplatformExtension.targetFromPresetInternal( KotlinMetadataTargetPreset(project), METADATA_TARGET_NAME ) @@ -128,6 +126,7 @@ class KotlinMultiplatformPlugin : Plugin { } fun setupDefaultPresets(project: Project) { + @Suppress("DEPRECATION") with(project.multiplatformExtension.presets) { add(KotlinJvmTargetPreset(project)) add(KotlinJsTargetPreset(project).apply { irPreset = null }) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt index 97778504849..527a347d7a9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/external/ExternalKotlinTargetImpl.kt @@ -48,6 +48,8 @@ internal class ExternalKotlinTargetImpl internal constructor( override val preset: Nothing? = null + override fun warnAboutCreationOfTargetFromPreset() {} + internal val logger: Logger = Logging.getLogger("${ExternalKotlinTargetImpl::class.qualifiedName}: $name") override val useDisambiguationClassifierAsSourceSetNamePrefix: Boolean = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt index 0616d953d4e..4fbb4becb19 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargetPresets.kt @@ -6,11 +6,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi +import org.jetbrains.kotlin.gradle.plugin.* +@DeprecatedTargetPresetApi abstract class KotlinOnlyTargetPreset, T : KotlinCompilation<*>>( protected val project: Project, ) : KotlinTargetPreset { @@ -28,12 +27,13 @@ abstract class KotlinOnlyTargetPreset, T : KotlinCompila abstract protected fun instantiateTarget(name: String): R - override fun createTarget(name: String): R { + override fun createTargetInternal(name: String): R { val result = instantiateTarget(name).apply { targetName = name disambiguationClassifier = provideTargetDisambiguationClassifier(this@apply) useDisambiguationClassifierAsSourceSetNamePrefix = useDisambiguationClassifierAsSourceSetNamePrefix() overrideDisambiguationClassifierOnIdeImport = overrideDisambiguationClassifierOnIdeImport(name) + @Suppress("DEPRECATION") preset = this@KotlinOnlyTargetPreset val compilationFactory = createCompilationFactory(this) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt index 32398c8625a..7a8fa16f9f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt @@ -7,22 +7,25 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPlugin.Companion.dynamicallyApplyWhenAndroidPluginIsApplied import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.AndroidGradlePluginIsMissing import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic import org.jetbrains.kotlin.gradle.utils.findAppliedAndroidPluginIdOrNull +import org.jetbrains.kotlin.gradle.targets.android.internal.InternalKotlinTargetPreset import javax.inject.Inject +@DeprecatedTargetPresetApi abstract class KotlinAndroidTargetPreset @Inject constructor( private val project: Project ) : KotlinTargetPreset { override fun getName(): String = PRESET_NAME - override fun createTarget(name: String): KotlinAndroidTarget { + override fun createTargetInternal(name: String): KotlinAndroidTarget { /* Android Gradle Plugin is required: @@ -35,6 +38,7 @@ abstract class KotlinAndroidTargetPreset @Inject constructor( project.findAppliedAndroidPluginIdOrNull() ?: project.reportDiagnostic(AndroidGradlePluginIsMissing(Throwable())) return project.objects.newInstance(KotlinAndroidTarget::class.java, name, project).apply { + @Suppress("DEPRECATION") preset = this@KotlinAndroidTargetPreset project.dynamicallyApplyWhenAndroidPluginIsApplied({ this }) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/InternalKotlinTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/InternalKotlinTargetPreset.kt new file mode 100644 index 00000000000..c67af82cc33 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/InternalKotlinTargetPreset.kt @@ -0,0 +1,25 @@ +/* + * 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.targets.android.internal + +import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset +import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics +import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic + +internal interface InternalKotlinTargetPreset : KotlinTargetPreset { + fun createTargetInternal(name: String): T + + override fun createTarget(name: String): T { + val target = createTargetInternal(name) + target.project.reportDiagnostic(KotlinToolingDiagnostics.CreateTarget()) + return target + } +} + +internal val KotlinTargetPreset.internal: InternalKotlinTargetPreset + get() = this as InternalKotlinTargetPreset \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt index e69fb249ffa..5b5e3ad7173 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenE import org.jetbrains.kotlin.statistics.metrics.StringMetrics import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly +@DeprecatedTargetPresetApi open class KotlinJsIrTargetPreset( project: Project ) : KotlinOnlyTargetPreset( @@ -65,6 +67,7 @@ open class KotlinJsIrTargetPreset( } } +@DeprecatedTargetPresetApi class KotlinJsIrSingleTargetPreset( project: Project ) : KotlinJsIrTargetPreset( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinWasmTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinWasmTargetPreset.kt index 8582709cf71..65a48a58811 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinWasmTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinWasmTargetPreset.kt @@ -6,14 +6,13 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset -import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated +@DeprecatedTargetPresetApi class KotlinWasmTargetPreset( project: Project, ) : KotlinOnlyTargetPreset(project) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt index 5159f1e3f66..a50f521e620 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetPreset.kt @@ -7,11 +7,13 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator +@DeprecatedTargetPresetApi class KotlinJvmTargetPreset( project: Project ) : KotlinOnlyTargetPreset( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmWithJavaTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmWithJavaTargetPreset.kt index 180523c2dd7..3b9e3ff7403 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmWithJavaTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmWithJavaTargetPreset.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptionsDefault import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions @@ -17,13 +18,14 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider import org.jetbrains.kotlin.gradle.utils.configureExperimentalTryK2 +@DeprecatedTargetPresetApi class KotlinJvmWithJavaTargetPreset( private val project: Project ) : KotlinTargetPreset> { override fun getName(): String = PRESET_NAME - override fun createTarget(name: String): KotlinWithJavaTarget { + override fun createTargetInternal(name: String): KotlinWithJavaTarget { project.reportDiagnostic(KotlinToolingDiagnostics.DeprecatedJvmWithJavaPresetDiagnostic()) project.plugins.apply(JavaPlugin::class.java) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt index 03d31f7e3af..874e151b6c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt @@ -7,11 +7,13 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator +@DeprecatedTargetPresetApi class KotlinMetadataTargetPreset( project: Project ) : KotlinOnlyTargetPreset>(project) { @@ -49,8 +51,8 @@ class KotlinMetadataTargetPreset( return project.objects.newInstance(KotlinMetadataTarget::class.java, project) } - override fun createTarget(name: String): KotlinMetadataTarget = - super.createTarget(name).apply { + override fun createTargetInternal(name: String): KotlinMetadataTarget = + super.createTargetInternal(name).apply { val mainCompilation = compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) val commonMainSourceSet = project.kotlinExtension.sourceSets.getByName(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 6d5a1ef6086..8a6f82100ec 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -10,6 +10,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project import org.jetbrains.kotlin.compilerRunner.konanHome +import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.targets.native.internal.* import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.gradle.utils.setupNativeCompiler import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget +@DeprecatedTargetPresetApi abstract class AbstractKotlinNativeTargetPreset( private val name: String, val project: Project, @@ -39,12 +41,13 @@ abstract class AbstractKotlinNativeTargetPreset( protected abstract fun instantiateTarget(name: String): T - override fun createTarget(name: String): T { + override fun createTargetInternal(name: String): T { project.setupNativeCompiler(konanTarget) val result = instantiateTarget(name).apply { targetName = name disambiguationClassifier = name + @Suppress("DEPRECATION") preset = this@AbstractKotlinNativeTargetPreset val compilationFactory = KotlinNativeCompilationFactory(this) @@ -73,6 +76,7 @@ abstract class AbstractKotlinNativeTargetPreset( } +@DeprecatedTargetPresetApi open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { @@ -84,6 +88,7 @@ open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: } } +@DeprecatedTargetPresetApi open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { @@ -94,6 +99,7 @@ open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget) } +@DeprecatedTargetPresetApi open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget) : AbstractKotlinNativeTargetPreset(name, project, konanTarget) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt index ecf22adcc4a..ec9ec9e97e5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt @@ -519,6 +519,7 @@ class ConfigurationsTest : MultiplatformExtensionTest() { extensions.asMap.keys, kotlin.sourceSets.names, kotlin.targets.names, + @Suppress("DEPRECATION") kotlin.presets.names, ).flatten() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinHierarchyBuilderTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinHierarchyBuilderTest.kt index f4bb94340fe..8dc4ad90700 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinHierarchyBuilderTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinHierarchyBuilderTest.kt @@ -24,6 +24,7 @@ class KotlinHierarchyBuilderTest { fun `test - interface offers functions for known presets`() { val kotlinTargetHierarchyBuilderInterface = KotlinHierarchyBuilder::class.java + @Suppress("DEPRECATION") buildProjectWithMPP().multiplatformExtension.presets // JS targets are special and therefore are only handled manually using `withJs()` diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt index 17ee5149a5b..f537b7b946d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/MppDiagnosticsFunctionalTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests +import org.jetbrains.kotlin.gradle.dsl.targetFromPresetInternal import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmWithJavaTargetPreset import org.jetbrains.kotlin.gradle.util.androidLibrary import org.jetbrains.kotlin.gradle.util.checkDiagnosticsWithMppProject @@ -45,7 +46,8 @@ class MppDiagnosticsFunctionalTest { fun testDeprecatedJvmWithJavaPreset() { checkDiagnosticsWithMppProject("deprecatedJvmWithJavaPreset") { kotlin { - targetFromPreset(presets.getByName(KotlinJvmWithJavaTargetPreset.PRESET_NAME)) + @Suppress("DEPRECATION") + targetFromPresetInternal(presets.getByName(KotlinJvmWithJavaTargetPreset.PRESET_NAME)) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/TargetPresetDeprecationTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/TargetPresetDeprecationTest.kt index d4a6b600299..fa129d3a8a0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/TargetPresetDeprecationTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/diagnosticsTests/TargetPresetDeprecationTest.kt @@ -63,4 +63,4 @@ class TargetPresetDeprecationTest { } } -} +} \ No newline at end of file