[BT] Mark the API as experimental

#KT-57398 In Progress
diff --git a/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api b/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api
index 039c6c3..987148e 100644
--- a/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api
+++ b/compiler/build-tools/kotlin-build-tools-api/api/kotlin-build-tools-api.api
@@ -8,6 +8,9 @@
 	public final fun loadImplementation (Ljava/lang/ClassLoader;)Lorg/jetbrains/kotlin/buildtools/api/CompilationService;
 }
 
+public abstract interface annotation class org/jetbrains/kotlin/buildtools/api/ExperimentalBuildToolsApi : java/lang/annotation/Annotation {
+}
+
 public abstract interface class org/jetbrains/kotlin/buildtools/api/KotlinLogger {
 	public abstract fun debug (Ljava/lang/String;)V
 	public abstract fun error (Ljava/lang/String;Ljava/lang/Throwable;)V
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/CompilationService.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/CompilationService.kt
index 3cb7177..2d490cf 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/CompilationService.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/CompilationService.kt
@@ -13,6 +13,7 @@
  * A facade for invoking compilation in Kotlin compiler. It allows to use compiler in different modes.
  * TODO: add a mention where to see the available modes after implementing them
  */
+@ExperimentalBuildToolsApi
 interface CompilationService {
     fun compile(
         compilationStrategySettings: CompilationStrategySettings,
@@ -20,6 +21,7 @@
         compilationOptions: CompilationOptions,
     ): CompilationResult
 
+    @ExperimentalBuildToolsApi
     companion object {
         @JvmStatic
         fun loadImplementation(classLoader: ClassLoader) = loadImplementation(CompilationService::class, classLoader)
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/ExperimentalBuildToolsApi.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/ExperimentalBuildToolsApi.kt
new file mode 100644
index 0000000..25aa05f
--- /dev/null
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/ExperimentalBuildToolsApi.kt
@@ -0,0 +1,9 @@
+/*
+ * 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.buildtools.api
+
+@RequiresOptIn("This part of the Build Tools API is experimental and might change in the future releases")
+annotation class ExperimentalBuildToolsApi
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SharedApiClassesClassLoader.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SharedApiClassesClassLoader.kt
index 4dca491..7d4a7b4 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SharedApiClassesClassLoader.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/SharedApiClassesClassLoader.kt
@@ -16,6 +16,7 @@
  */
 @Suppress("FunctionName")
 @JvmName("newInstance")
+@ExperimentalBuildToolsApi
 fun SharedApiClassesClassLoader(): ClassLoader = SharedApiClassesClassLoaderImpl(
     SharedApiClassesClassLoaderImpl::class.java.classLoader,
     ClassLoader.getSystemClassLoader(),
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationOptions.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationOptions.kt
index 7066952..457073a 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationOptions.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationOptions.kt
@@ -5,38 +5,48 @@
 
 package org.jetbrains.kotlin.buildtools.api.compilation
 
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
 import org.jetbrains.kotlin.buildtools.api.KotlinLogger
 
+@ExperimentalBuildToolsApi
 sealed class CompilationOptions(
     val logger: KotlinLogger?
 )
 
+@ExperimentalBuildToolsApi
 abstract class JvmCompilationOptions(
     logger: KotlinLogger?,
     val kotlinScriptExtensions: List<String>,
 ) : CompilationOptions(logger)
 
+@ExperimentalBuildToolsApi
 interface IncrementalCompilationOptions
 
+@ExperimentalBuildToolsApi
 interface NonIncrementalCompilationOptions
 
+@ExperimentalBuildToolsApi
 class NonIncrementalJvmCompilationOptions(
     logger: KotlinLogger? = null,
     kotlinScriptExtensions: List<String>,
 ) : JvmCompilationOptions(logger, kotlinScriptExtensions), NonIncrementalCompilationOptions
 
+@ExperimentalBuildToolsApi
 abstract class JsCompilationOptions(
     logger: KotlinLogger?,
 ) : CompilationOptions(logger)
 
+@ExperimentalBuildToolsApi
 class NonIncrementalJsCompilationOptions(
     logger: KotlinLogger? = null,
 ) : JsCompilationOptions(logger), NonIncrementalCompilationOptions
 
+@ExperimentalBuildToolsApi
 abstract class MetadataCompilationOptions(
     logger: KotlinLogger?,
 ) : CompilationOptions(logger)
 
+@ExperimentalBuildToolsApi
 class NonIncrementalMetadataCompilationOptions(
     logger: KotlinLogger? = null,
 ) : MetadataCompilationOptions(logger), NonIncrementalCompilationOptions
\ No newline at end of file
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationResult.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationResult.kt
index d503ae9..2dab7a4 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationResult.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationResult.kt
@@ -5,6 +5,9 @@
 
 package org.jetbrains.kotlin.buildtools.api.compilation
 
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
+
+@ExperimentalBuildToolsApi
 enum class CompilationResult {
     COMPILATION_SUCCESS,
     COMPILATION_ERROR,
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationStrategySettings.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationStrategySettings.kt
index 09d55a3..9428f01 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationStrategySettings.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/CompilationStrategySettings.kt
@@ -5,6 +5,9 @@
 
 package org.jetbrains.kotlin.buildtools.api.compilation
 
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
+
+@ExperimentalBuildToolsApi
 sealed class CompilationStrategySettings {
     object InProcess : CompilationStrategySettings()
 
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/KotlinBuildToolsException.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/KotlinBuildToolsException.kt
index 0d0f76f..c7ef09a 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/KotlinBuildToolsException.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/KotlinBuildToolsException.kt
@@ -5,4 +5,7 @@
 
 package org.jetbrains.kotlin.buildtools.api.compilation
 
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
+
+@ExperimentalBuildToolsApi
 open class KotlinBuildToolsException(message: String) : Exception(message)
\ No newline at end of file
diff --git a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/ParseCompilationArgumentsException.kt b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/ParseCompilationArgumentsException.kt
index 1d6c934..8f16918 100644
--- a/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/ParseCompilationArgumentsException.kt
+++ b/compiler/build-tools/kotlin-build-tools-api/src/main/kotlin/org/jetbrains/kotlin/buildtools/api/compilation/ParseCompilationArgumentsException.kt
@@ -5,4 +5,7 @@
 
 package org.jetbrains.kotlin.buildtools.api.compilation
 
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
+
+@ExperimentalBuildToolsApi
 class ParseCompilationArgumentsException(message: String) : KotlinBuildToolsException(message)
\ No newline at end of file
diff --git a/compiler/build-tools/kotlin-build-tools-impl/build.gradle.kts b/compiler/build-tools/kotlin-build-tools-impl/build.gradle.kts
index 6841e8b..fa84ec1 100644
--- a/compiler/build-tools/kotlin-build-tools-impl/build.gradle.kts
+++ b/compiler/build-tools/kotlin-build-tools-impl/build.gradle.kts
@@ -15,4 +15,10 @@
 
 publish()
 
-standardPublicJars()
\ No newline at end of file
+standardPublicJars()
+
+kotlin {
+    sourceSets.all {
+        languageSettings.optIn("org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi")
+    }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt
index 9ef27eb..1b65873 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/btapi/BuildToolsApiCompilationWork.kt
@@ -12,6 +12,7 @@
 import org.gradle.workers.WorkParameters
 import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
 import org.jetbrains.kotlin.buildtools.api.CompilationService
+import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
 import org.jetbrains.kotlin.buildtools.api.KotlinLogger
 import org.jetbrains.kotlin.buildtools.api.SharedApiClassesClassLoader
 import org.jetbrains.kotlin.buildtools.api.compilation.*
@@ -26,6 +27,7 @@
 import org.slf4j.LoggerFactory
 import java.io.File
 
+@OptIn(ExperimentalBuildToolsApi::class)
 internal abstract class BuildToolsApiCompilationWork : WorkAction<BuildToolsApiCompilationWork.BuildToolsApiCompilationParameters> {
     internal interface BuildToolsApiCompilationParameters : WorkParameters {
         val classLoadersCachingService: Property<ClassLoadersCachingBuildService>
@@ -107,6 +109,7 @@
     )
 }
 
+@OptIn(ExperimentalBuildToolsApi::class)
 private object SharedApiClassesClassLoaderProvider : ParentClassLoaderProvider {
     override fun getClassLoader() = SharedApiClassesClassLoader()