Update documentation for UsesKotlinJavaToolchain

^KT-58858 In Progress
This commit is contained in:
Yahor Berdnikau
2023-05-25 16:15:28 +02:00
committed by Space Team
parent 70d49999ac
commit 8988557b6d
@@ -12,39 +12,81 @@ import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Nested import org.gradle.api.tasks.Nested
import org.gradle.jvm.toolchain.JavaLauncher import org.gradle.jvm.toolchain.JavaLauncher
import org.gradle.util.GradleVersion
import java.io.File import java.io.File
/**
* Represents a Kotlin task using the [Gradle toolchains for JVM projects](https://docs.gradle.org/current/userguide/toolchains.html)
* feature inside its [TaskAction](https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskAction.html).
*
* The Gradle toolchains for JVM projects feature is used by our plugin to compile Kotlin/JVM.
*
* Use this interface to configure different tasks to use different JDK versions via
* [Gradle's tasks API](https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:configuring_tasks).
*/
interface UsesKotlinJavaToolchain : Task { interface UsesKotlinJavaToolchain : Task {
/**
* Kotlin task configured JVM toolchain.
*
* This variable always has a value.
*/
@get:Nested @get:Nested
val kotlinJavaToolchainProvider: Provider<out KotlinJavaToolchain> val kotlinJavaToolchainProvider: Provider<out KotlinJavaToolchain>
/**
* A helper shortcut to get [KotlinJavaToolchain] from [kotlinJavaToolchainProvider] without calling the `.get()` method.
*/
@get:Internal @get:Internal
val kotlinJavaToolchain: KotlinJavaToolchain val kotlinJavaToolchain: KotlinJavaToolchain
get() = kotlinJavaToolchainProvider.get() get() = kotlinJavaToolchainProvider.get()
} }
/**
* The Kotlin JVM toolchain.
*
* This interface provides ways to configure the JDK either via [JdkSetter] by providing a path to JDK directly, or
* via [JavaToolchainSetter] using the configured [JavaLauncher].
*
* The configured JDK Java version is exposed as a task input so that Gradle only reuses the task outputs stored in the
* [build cache](https://docs.gradle.org/current/userguide/build_cache.html) with the same JDK version.
*/
interface KotlinJavaToolchain { interface KotlinJavaToolchain {
/**
* The configured JVM toolchain [JavaVersion].
*
* This property represents the configured JVM toolchain [JavaVersion] used for the task.
* If the toolchain is not explicitly set, it defaults to the version of the JDK that Gradle is currently running.
*/
@get:Input @get:Input
val javaVersion: Provider<JavaVersion> val javaVersion: Provider<JavaVersion>
/**
* Provides access to the [JdkSetter] to configure the JVM toolchain for the task using an explicit JDK location.
*/
@get:Internal @get:Internal
val jdk: JdkSetter val jdk: JdkSetter
/**
* Provides access to the [JavaToolchainSetter] to configure JVM toolchain for the task
* using the [Gradle JVM toolchain](https://docs.gradle.org/current/userguide/toolchains.html).
*/
@get:Internal @get:Internal
val toolchain: JavaToolchainSetter val toolchain: JavaToolchainSetter
/**
* Provides methods to configure the task using an explicit JDK location.
*/
interface JdkSetter { interface JdkSetter {
/** /**
* Set JDK to use for Kotlin compilation. * Configures the JVM toolchain to use the JDK located under the [jdkHomeLocation] absolute path.
* The major JDK version from [javaVersion] is used as a task input so that Gradle avoids using task outputs
* in the [build cache](https://docs.gradle.org/current/userguide/build_cache.html) that use different JDK versions.
* *
* Major JDK version is considered as compile task input. * **Note**: The project build fails if the JRE version instead of the JDK version is provided.
* *
* @param jdkHomeLocation path to the JDK * @param jdkHomeLocation The path to the JDK location on the machine
* * @param jdkVersion The JDK version located in the configured [jdkHomeLocation] path
* *Note*: project build will fail on providing here JRE instead of JDK!
*
* @param jdkVersion provided JDK version
*/ */
fun use( fun use(
jdkHomeLocation: File, jdkHomeLocation: File,
@@ -52,13 +94,16 @@ interface KotlinJavaToolchain {
) )
/** /**
* Set JDK to use for Kotlin compilation. * Configures the JVM toolchain to use the JDK located under the [jdkHomeLocation] absolute path.
* The major JDK version from [javaVersion] is used as a task input so that Gradle avoids using task outputs
* in the [build cache](https://docs.gradle.org/current/userguide/build_cache.html) that use different JDK versions.
* *
* @param jdkHomeLocation path to the JDK * **Note**: The project build fails if the JRE version instead of the JDK version is provided.
* *
* **Note**: project build will fail on providing here JRE instead of JDK! * @param jdkHomeLocation The path to the JDK location on the machine
* * @param jdkVersion JDK version located in the configured [jdkHomeLocation] path.
* @param jdkVersion any type that is accepted by [JavaVersion.toVersion] * Accepts any type that is accepted by [JavaVersion.toVersion].
* @throws IllegalArgumentException if the given [jdkVersion] value cannot be converted
*/ */
fun use( fun use(
jdkHomeLocation: String, jdkHomeLocation: String,
@@ -66,9 +111,13 @@ interface KotlinJavaToolchain {
) = use(File(jdkHomeLocation), JavaVersion.toVersion(jdkVersion)) ) = use(File(jdkHomeLocation), JavaVersion.toVersion(jdkVersion))
} }
/**
* Provides methods to configure the task using the [Gradle JVM toolchain](https://docs.gradle.org/current/userguide/toolchains.html).
*/
interface JavaToolchainSetter { interface JavaToolchainSetter {
/** /**
* Set JDK obtained from [org.gradle.jvm.toolchain.JavaToolchainService] to use for Kotlin compilation. * Configures the JVM toolchain for a task using the [JavaLauncher] obtained from [org.gradle.jvm.toolchain.JavaToolchainService] via
* the [org.gradle.api.plugins.JavaPluginExtension] extension.
*/ */
fun use( fun use(
javaLauncher: Provider<JavaLauncher> javaLauncher: Provider<JavaLauncher>