Deprecate preset APIs

^KT-59321
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 38c54e6..0e76fec 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
@@ -15,6 +15,7 @@
 import org.gradle.api.attributes.HasAttributes
 import org.gradle.api.component.SoftwareComponent
 import org.gradle.api.publish.maven.MavenPublication
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptionsDeprecated
 import org.jetbrains.kotlin.tooling.core.HasMutableExtras
 
@@ -52,8 +53,16 @@
     fun attributes(configure: AttributeContainer.() -> Unit) = attributes.configure()
     fun attributes(configure: Action<AttributeContainer>) = attributes { configure.execute(this) }
 
+    @OptIn(TargetPresetsDeprecation::class)
+    @Deprecated(
+        presetsApiIsDeprecatedMessage,
+        level = DeprecationLevel.WARNING,
+    )
     val preset: KotlinTargetPreset<out KotlinTarget>?
 
+    @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 afc460d..f4f458a 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,31 @@
 package org.jetbrains.kotlin.gradle.plugin
 
 import org.gradle.api.Named
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 
+const val apiIsDeprecatedMessage =
+    "API is deprecated and will be phased out soon. Learn how to configure targets at: https://kotl.in/target-configuration"
+const val presetsApiIsDeprecatedMessage = "Presets $apiIsDeprecatedMessage"
+
+@RequiresOptIn(
+    message = presetsApiIsDeprecatedMessage,
+    level = RequiresOptIn.Level.WARNING
+)
+annotation class TargetPresetsDeprecation
+
+@TargetPresetsDeprecation
 interface KotlinTargetPreset<T: KotlinTarget> : Named {
-    fun createTarget(name: String): T
+    @InternalKotlinGradlePluginApi
+    fun createTargetInternal(name: String): T
+
+    @OptIn(InternalKotlinGradlePluginApi::class)
+    @Deprecated(
+        presetsApiIsDeprecatedMessage,
+        level = DeprecationLevel.WARNING,
+    )
+    fun createTarget(name: String): T {
+        val target = createTargetInternal(name)
+        target.warnAboutCreationOfTargetFromPreset()
+        return target
+    }
 }
\ 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 e9ed625..c6a1ad8 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
@@ -13,7 +13,12 @@
     val targets: NamedDomainObjectCollection<KotlinTarget>
 }
 
+@TargetPresetsDeprecation
 interface KotlinTargetsContainerWithPresets : KotlinTargetsContainer {
+    @Deprecated(
+        presetsApiIsDeprecatedMessage,
+        level = DeprecationLevel.WARNING,
+    )
     val presets: NamedDomainObjectCollection<KotlinTargetPreset<*>>
 }
 
diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
index b329927..a06390d 100644
--- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
@@ -30,6 +30,7 @@
                 "org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi",
                 "org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi",
                 "org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi",
+                "org.jetbrains.kotlin.gradle.plugin.TargetPresetsDeprecation",
             )
         )
     }
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 5508b37..90b6ab4 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,6 +11,8 @@
 import org.jetbrains.kotlin.gradle.plugin.*
 import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterFinaliseDsl
 import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
 import org.jetbrains.kotlin.gradle.plugin.hierarchy.KotlinHierarchyDslImpl
 import org.jetbrains.kotlin.gradle.plugin.mpp.*
 import javax.inject.Inject
@@ -26,6 +28,10 @@
     KotlinTargetContainerWithNativeShortcuts,
     KotlinHierarchyDsl,
     KotlinMultiplatformSourceSetConventions by KotlinMultiplatformSourceSetConventionsImpl {
+    @Deprecated(
+        presetsApiIsDeprecatedMessage,
+        level = DeprecationLevel.WARNING,
+    )
     override val presets: NamedDomainObjectCollection<KotlinTargetPreset<*>> = project.container(KotlinTargetPreset::class.java)
 
     final override val targets: NamedDomainObjectCollection<KotlinTarget> = project.container(KotlinTarget::class.java)
@@ -40,7 +46,8 @@
     private val presetExtension = project.objects.newInstance(
         DefaultTargetsFromPresetExtension::class.java,
         { this },
-        targets
+        targets,
+        project,
     )
 
     fun targets(configure: Action<TargetsFromPresetExtension>) {
@@ -131,41 +138,122 @@
         targets.all { it.withSourcesJar(publish) }
     }
 
-    fun <T : KotlinTarget> targetFromPreset(
+    internal fun <T : KotlinTarget> targetFromPresetInternal(
         preset: KotlinTargetPreset<T>,
         name: String = preset.name,
         configure: T.() -> Unit = { },
     ): T = configureOrCreate(name, preset, configure)
 
+    internal fun <T : KotlinTarget> targetFromPresetInternal(
+        preset: KotlinTargetPreset<T>,
+        name: String,
+        configure: Action<T>,
+    ) = targetFromPresetInternal(preset, name) { configure.execute(this) }
+
+    internal fun <T : KotlinTarget> targetFromPresetInternal(preset: KotlinTargetPreset<T>) =
+        targetFromPresetInternal(preset, preset.name) { }
+
+    internal fun <T : KotlinTarget> targetFromPresetInternal(preset: KotlinTargetPreset<T>, name: String) =
+        targetFromPresetInternal(preset, name) { }
+
+    internal fun <T : KotlinTarget> targetFromPresetInternal(preset: KotlinTargetPreset<T>, configure: Action<T>) =
+        targetFromPresetInternal(preset, preset.name, configure)
+
+    private fun warnAboutTargetFromPresetDeprecation() {
+        project.reportDiagnostic(
+            KotlinToolingDiagnostics.TargetPresets(
+                KotlinToolingDiagnostics.TargetPresets.API.TargetFromPreset
+            )
+        )
+    }
+
+    @TargetPresetsDeprecation
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.targetFromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING
+    )
     fun <T : KotlinTarget> targetFromPreset(
         preset: KotlinTargetPreset<T>,
         name: String,
         configure: Action<T>,
-    ) = targetFromPreset(preset, name) { configure.execute(this) }
+    ) {
+        warnAboutTargetFromPresetDeprecation()
+        targetFromPresetInternal(
+            preset = preset,
+            name = name,
+            configure = configure,
+        )
+    }
 
-    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>) = targetFromPreset(preset, preset.name) { }
-    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>, name: String) = targetFromPreset(preset, name) { }
-    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>, configure: Action<T>) =
-        targetFromPreset(preset, preset.name, configure)
+    @TargetPresetsDeprecation
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.targetFromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING
+    )
+    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>) {
+        warnAboutTargetFromPresetDeprecation()
+        targetFromPresetInternal(
+            preset = preset
+        )
+    }
+
+    @TargetPresetsDeprecation
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.targetFromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING
+    )
+    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>, name: String) {
+        warnAboutTargetFromPresetDeprecation()
+        targetFromPresetInternal(
+            preset = preset,
+            name = name
+        )
+    }
+
+    @TargetPresetsDeprecation
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.targetFromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING
+    )
+    fun <T : KotlinTarget> targetFromPreset(preset: KotlinTargetPreset<T>, configure: Action<T>) {
+        warnAboutTargetFromPresetDeprecation()
+        targetFromPresetInternal(
+            preset = preset,
+            configure = configure
+        )
+    }
 
     internal val rootSoftwareComponent: KotlinSoftwareComponent by lazy {
         KotlinSoftwareComponentWithCoordinatesAndPublication(project, "kotlin", targets)
     }
 }
 
+@TargetPresetsDeprecation
 interface TargetsFromPresetExtension : NamedDomainObjectCollection<KotlinTarget> {
 
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.fromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING,
+    )
     fun <T : KotlinTarget> fromPreset(
         preset: KotlinTargetPreset<T>,
         name: String,
         configureAction: T.() -> Unit = {},
     ): T
 
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.fromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING,
+    )
     fun <T : KotlinTarget> fromPreset(
         preset: KotlinTargetPreset<T>,
         name: String,
     ): T = fromPreset(preset, name, {})
 
+    @Deprecated(
+        KotlinToolingDiagnostics.TargetPresets.fromPresetDeprecationMessage,
+        level = DeprecationLevel.WARNING,
+    )
     fun <T : KotlinTarget> fromPreset(
         preset: KotlinTargetPreset<T>,
         name: String,
@@ -176,14 +264,26 @@
 internal abstract class DefaultTargetsFromPresetExtension @Inject constructor(
     private val targetsContainer: () -> KotlinTargetsContainerWithPresets,
     val targets: NamedDomainObjectCollection<KotlinTarget>,
+    val project: Project,
 ) : TargetsFromPresetExtension,
     NamedDomainObjectCollection<KotlinTarget> by targets {
 
+    private fun warnAboutFromPresetDeprecation() {
+        project.reportDiagnostic(
+            KotlinToolingDiagnostics.TargetPresets(
+                KotlinToolingDiagnostics.TargetPresets.API.FromPreset
+            )
+        )
+    }
+
     override fun <T : KotlinTarget> fromPreset(
         preset: KotlinTargetPreset<T>,
         name: String,
         configureAction: T.() -> Unit,
-    ): T = targetsContainer().configureOrCreate(name, preset, configureAction)
+    ): T {
+        warnAboutFromPresetDeprecation()
+        return targetsContainer().configureOrCreate(name, preset, configureAction)
+    }
 
     override fun <T : KotlinTarget> fromPreset(
         preset: KotlinTargetPreset<T>,
@@ -211,7 +311,7 @@
         }
 
         existingTarget == null -> {
-            val newTarget = targetPreset.createTarget(targetName)
+            val newTarget = targetPreset.createTargetInternal(targetName)
             targets.add(newTarget)
             configure(newTarget)
             return newTarget
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 b695818..cf9be0b 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
@@ -327,20 +327,20 @@
                     .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/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt
index 47d08f2..826efbc 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
@@ -16,6 +16,7 @@
 import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_IGNORE_DISABLED_TARGETS
 import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_SUPPRESS_EXPERIMENTAL_ARTIFACTS_DSL_WARNING
 import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.*
+import org.jetbrains.kotlin.gradle.plugin.apiIsDeprecatedMessage
 import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
 import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
 
@@ -546,6 +547,22 @@
             throwable = trace
         )
     }
+
+    object TargetPresets : ToolingDiagnosticFactory(WARNING) {
+        const val targetFromPresetDeprecationMessage = "targetFromPreset() $apiIsDeprecatedMessage"
+        const val fromPresetDeprecationMessage = "fromPreset() $apiIsDeprecatedMessage"
+        const val createTargetDeprecationMessage = "KotlinTargetPreset.createTarget() $apiIsDeprecatedMessage"
+
+        enum class API(val message: String) {
+            TargetFromPreset(targetFromPresetDeprecationMessage),
+            FromPreset(fromPresetDeprecationMessage),
+            CreateTarget(createTargetDeprecationMessage)
+        }
+
+        operator fun invoke(api: API) = build(
+            api.message
+        )
+    }
 }
 
 private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {
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 3e1ced5..a55f0e7 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
@@ -21,6 +21,8 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
 import org.jetbrains.kotlin.gradle.plugin.*
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsageContext.MavenScope.*
 import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
 import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -179,8 +181,21 @@
         publicationConfigureActions.all { action -> action.execute(publication) }
     }
 
+    @OptIn(TargetPresetsDeprecation::class)
+    @Deprecated(
+        presetsApiIsDeprecatedMessage,
+        level = DeprecationLevel.WARNING,
+    )
     override var preset: KotlinTargetPreset<out KotlinTarget>? = null
         internal set
+
+    override fun warnAboutCreationOfTargetFromPreset() {
+        project.reportDiagnostic(
+            KotlinToolingDiagnostics.TargetPresets(
+                KotlinToolingDiagnostics.TargetPresets.API.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 b74d8f4..2d1a0d5 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,6 +9,7 @@
 import org.gradle.api.Project
 import org.gradle.api.plugins.JavaBasePlugin
 import org.gradle.util.GradleVersion
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.dsl.explicitApiModeAsCompilerArg
 import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
@@ -33,7 +34,6 @@
 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 +55,7 @@
         setupTargetsBuildStatsReport(project)
 
         // set up metadata publishing
-        kotlinMultiplatformExtension.targetFromPreset(
+        kotlinMultiplatformExtension.targetFromPresetInternal(
             KotlinMetadataTargetPreset(project),
             METADATA_TARGET_NAME
         )
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 9777850..527a347 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 @@
 
     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 0616d95..d125baf 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.InternalKotlinGradlePluginApi
+import org.jetbrains.kotlin.gradle.plugin.*
 
+@TargetPresetsDeprecation
 abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
     protected val project: Project,
 ) : KotlinTargetPreset<R> {
@@ -28,7 +27,7 @@
 
     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)
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 9258f1f..74acc31 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
@@ -9,16 +9,18 @@
 import org.gradle.api.Project
 import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPlugin.Companion.dynamicallyApplyWhenAndroidPluginIsApplied
 import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
+import org.jetbrains.kotlin.gradle.plugin.TargetPresetsDeprecation
 
 import javax.inject.Inject
 
+@TargetPresetsDeprecation
 abstract class KotlinAndroidTargetPreset @Inject constructor(
     private val project: Project
 ) : KotlinTargetPreset<KotlinAndroidTarget> {
 
     override fun getName(): String = PRESET_NAME
 
-    override fun createTarget(name: String): KotlinAndroidTarget {
+    override fun createTargetInternal(name: String): KotlinAndroidTarget {
         val result = project.objects.newInstance(
             KotlinAndroidTarget::class.java,
             name,
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt
index 3e2a767..b5e9f2c 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt
@@ -9,6 +9,7 @@
 package org.jetbrains.kotlin.gradle.plugin.mpp
 
 import org.gradle.api.Project
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 import org.jetbrains.kotlin.gradle.plugin.*
 import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
 import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
@@ -19,6 +20,7 @@
 import org.jetbrains.kotlin.statistics.metrics.StringMetrics
 import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
 
+@TargetPresetsDeprecation
 open class KotlinJsTargetPreset(
     project: Project
 ) : KotlinOnlyTargetPreset<KotlinJsTarget, KotlinJsCompilation>(
@@ -46,7 +48,7 @@
             project,
             platformType
         ).apply {
-            this.irTarget = irPreset?.createTarget(
+            this.irTarget = irPreset?.createTargetInternal(
                 lowerCamelCaseName(
                     name.removeJsCompilerSuffix(KotlinJsCompilerType.LEGACY),
                     KotlinJsCompilerType.IR.lowerName
@@ -87,6 +89,7 @@
     }
 }
 
+@TargetPresetsDeprecation
 class KotlinJsSingleTargetPreset(
     project: Project
 ) : KotlinJsTargetPreset(
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 e69fb24..8638679 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
@@ -16,6 +16,7 @@
 import org.jetbrains.kotlin.statistics.metrics.StringMetrics
 import org.jetbrains.kotlin.util.capitalizeDecapitalize.decapitalizeAsciiOnly
 
+@TargetPresetsDeprecation
 open class KotlinJsIrTargetPreset(
     project: Project
 ) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(
@@ -65,6 +66,7 @@
     }
 }
 
+@TargetPresetsDeprecation
 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 8582709..40c7504 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,15 @@
 package org.jetbrains.kotlin.gradle.targets.js.ir
 
 import org.gradle.api.Project
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 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.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
 
+@TargetPresetsDeprecation
 class KotlinWasmTargetPreset(
     project: Project,
 ) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(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 5159f1e..b4c53b8 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
@@ -9,9 +9,11 @@
 import org.gradle.api.Project
 import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
 import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
+import org.jetbrains.kotlin.gradle.plugin.TargetPresetsDeprecation
 import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
 import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator
 
+@TargetPresetsDeprecation
 class KotlinJvmTargetPreset(
     project: Project
 ) : KotlinOnlyTargetPreset<KotlinJvmTarget, KotlinJvmCompilation>(
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 180523c..114694d 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 @@
 
 import org.gradle.api.Project
 import org.gradle.api.plugins.JavaPlugin
+import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
 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.tasks.KotlinTasksProvider
 import org.jetbrains.kotlin.gradle.utils.configureExperimentalTryK2
 
+@TargetPresetsDeprecation
 class KotlinJvmWithJavaTargetPreset(
     private val project: Project
 ) : KotlinTargetPreset<KotlinWithJavaTarget<KotlinJvmOptions, KotlinJvmCompilerOptions>> {
 
     override fun getName(): String = PRESET_NAME
 
-    override fun createTarget(name: String): KotlinWithJavaTarget<KotlinJvmOptions, KotlinJvmCompilerOptions> {
+    override fun createTargetInternal(name: String): KotlinWithJavaTarget<KotlinJvmOptions, KotlinJvmCompilerOptions> {
         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 32cc111..9bc8658 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.InternalKotlinGradlePluginApi
 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
 
+@TargetPresetsDeprecation
 class KotlinMetadataTargetPreset(
     project: Project
 ) : KotlinOnlyTargetPreset<KotlinMetadataTarget, KotlinCompilation<*>>(project) {
@@ -49,8 +51,8 @@
         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 6d5a1ef..d596cdd 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
@@ -17,6 +17,7 @@
 import org.jetbrains.kotlin.konan.target.HostManager
 import org.jetbrains.kotlin.konan.target.KonanTarget
 
+@TargetPresetsDeprecation
 abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
     private val name: String,
     val project: Project,
@@ -39,7 +40,7 @@
 
     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 {
@@ -73,6 +74,7 @@
 
 }
 
+@TargetPresetsDeprecation
 open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) :
     AbstractKotlinNativeTargetPreset<KotlinNativeTarget>(name, project, konanTarget) {
 
@@ -84,6 +86,7 @@
     }
 }
 
+@TargetPresetsDeprecation
 open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
     AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithHostTests>(name, project, konanTarget) {
 
@@ -94,6 +97,7 @@
         project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget)
 }
 
+@TargetPresetsDeprecation
 open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
     AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithSimulatorTests>(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 5438a6b..2d5592d 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
@@ -536,6 +536,7 @@
                     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 f4bb943..8dc4ad9 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 @@
     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 8c4fa43..64911b5 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
@@ -37,7 +37,8 @@
     fun testDeprecatedJvmWithJavaPreset() {
         checkDiagnosticsWithMppProject("deprecatedJvmWithJavaPreset") {
             kotlin {
-                targetFromPreset(presets.getByName(KotlinJvmWithJavaTargetPreset.PRESET_NAME))
+                @Suppress("DEPRECATION")
+                targetFromPresetInternal(presets.getByName(KotlinJvmWithJavaTargetPreset.PRESET_NAME))
             }
         }
     }