diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index 51d16492aa2..55df0e4782a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild +import org.jetbrains.kotlin.gradle.utils.getSystemProperty import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.presetName import org.jetbrains.kotlin.statistics.metrics.StringMetrics @@ -35,6 +36,7 @@ internal fun PropertiesProvider.mapKotlinTaskProperties(task: AbstractKotlinComp usePreciseJavaTracking?.let { task.usePreciseJavaTracking = it } + task.useClasspathSnapshot.value(useClasspathSnapshot).disallowChanges() useFir?.let { if (it == true) { task.kotlinOptions.useFir = true @@ -96,6 +98,16 @@ internal class PropertiesProvider private constructor(private val project: Proje val usePreciseJavaTracking: Boolean? get() = booleanProperty("kotlin.incremental.usePreciseJavaTracking") + val useClasspathSnapshot: Boolean + get() { + // The feature should be controlled by a Gradle property. + // Currently, we also allow it to be controlled by a system property to make it easier to test the feature during development. + // TODO: Remove the system property later. + val gradleProperty = booleanProperty("kotlin.incremental.useClasspathSnapshot") ?: false + val systemProperty = project.getSystemProperty("kotlin.incremental.useClasspathSnapshot")?.toBoolean() ?: false + return gradleProperty || systemProperty + } + val useFir: Boolean? get() = booleanProperty("kotlin.useFir") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 4a68144b9e9..76d5ade54a8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -421,6 +421,9 @@ abstract class KotlinCompile @Inject constructor( logger.kotlinDebug { "Set $this.usePreciseJavaTracking=$value" } } + @get:Input + abstract val useClasspathSnapshot: Property + init { incremental = true }