From 51fe1fd3ccd2bcd03c11306408cd76cb60dcfe87 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Fri, 25 Aug 2023 18:02:40 +0200 Subject: [PATCH] [Gradle] Introduce `ConfigurationCacheStartParameterAccessor` #KT-61457 In Progress --- .../gradle/plugin/KotlinPluginWrapper.kt | 5 +++ ...onfigurationCacheStartParameterAccessor.kt | 42 +++++++++++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + ...igurationCacheStartParameterAccessorG70.kt | 21 ++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + ...igurationCacheStartParameterAccessorG71.kt | 22 ++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + ...igurationCacheStartParameterAccessorG74.kt | 22 ++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + ...igurationCacheStartParameterAccessorG75.kt | 22 ++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 1 + ...figurationCacheStartParameterAccessorG6.kt | 21 ++++++++++ 12 files changed, 160 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessor.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG70.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG71.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG74.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG75.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG6.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt index 677628273e0..5d109cba8e7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt @@ -194,6 +194,11 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { UnameExecutor.UnameExecutorVariantFactory::class, DefaultUnameExecutorVariantFactory() ) + + factories.putIfAbsent( + ConfigurationCacheStartParameterAccessor.Factory::class, + DefaultConfigurationCacheStartParameterAccessorVariantFactory() + ) } protected fun setupAttributeMatchingStrategy( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessor.kt new file mode 100644 index 00000000000..a641f2bbae0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessor.kt @@ -0,0 +1,42 @@ +/* + * 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.plugin.internal + +import org.gradle.api.Project +import org.gradle.api.invocation.Gradle +import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories +import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory + +/** + * KGP was using `StartParametersInternal.isConfigurationCache` to find out whether the build requests configuration cache. + * That property became deprecated since Gradle 7.1 and is scheduled to be removed soon. + * As a replacement, Gradle provides [org.gradle.StartParameter.isConfigurationCacheRequested] since Gradle 7.6 + */ +internal interface ConfigurationCacheStartParameterAccessor { + val isConfigurationCacheRequested: Boolean + + interface Factory : VariantImplementationFactories.VariantImplementationFactory { + fun getInstance(gradle: Gradle): ConfigurationCacheStartParameterAccessor + } +} + +internal class DefaultConfigurationCacheStartParameterAccessorVariantFactory : + ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = DefaultConfigurationCacheStartParameterAccessor(gradle) +} + +internal class DefaultConfigurationCacheStartParameterAccessor( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested: Boolean by lazy { + gradle.startParameter.isConfigurationCacheRequested + } +} + +internal val Project.isConfigurationCacheRequested + get() = variantImplementationFactory() + .getInstance(gradle) + .isConfigurationCacheRequested diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index af7d71ec3e6..4180d9d2f38 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -166,4 +166,5 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG70.Factory() factories[UnameExecutor.UnameExecutorVariantFactory::class] = UnameExecutorG70.UnameExecutorVariantFactoryG70() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG70.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG70.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG70.kt new file mode 100644 index 00000000000..dafe266b9aa --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG70.kt @@ -0,0 +1,21 @@ +/* + * 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.plugin.internal + +import org.gradle.api.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ConfigurationCacheStartParameterAccessorG70( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested by lazy { + (gradle.startParameter as StartParameterInternal).isConfigurationCache + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG70(gradle) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index dc0172afaf7..382186a5a90 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -167,4 +167,5 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG71.Factory() factories[UnameExecutor.UnameExecutorVariantFactory::class] = UnameExecutorG71.UnameExecutorVariantFactoryG71() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG71.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG71.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG71.kt new file mode 100644 index 00000000000..bffdfbbadd3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG71.kt @@ -0,0 +1,22 @@ +/* + * 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.plugin.internal + +import org.gradle.api.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ConfigurationCacheStartParameterAccessorG71( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + @Suppress("DEPRECATION") + override val isConfigurationCacheRequested by lazy { + (gradle.startParameter as StartParameterInternal).isConfigurationCache + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG71(gradle) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index b534da38811..5ced077079d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -156,4 +156,5 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG74.Factory() factories[UnameExecutor.UnameExecutorVariantFactory::class] = UnameExecutorG74.UnameExecutorVariantFactoryG74() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG74.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG74.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG74.kt new file mode 100644 index 00000000000..a77c9a7695b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG74.kt @@ -0,0 +1,22 @@ +/* + * 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.plugin.internal + +import org.gradle.api.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ConfigurationCacheStartParameterAccessorG74( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + @Suppress("DEPRECATION") + override val isConfigurationCacheRequested by lazy { + (gradle.startParameter as StartParameterInternal).isConfigurationCache + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG74(gradle) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index f87558d4f06..7e741506d8f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -153,4 +153,5 @@ private fun Project.registerVariantImplementations() { ProjectIsolationStartParameterAccessorG75.Factory() factories[CompatibilityConventionRegistrar.Factory::class] = CompatibilityConventionRegistrarG75.Factory() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG75.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG75.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG75.kt new file mode 100644 index 00000000000..8cfde577b8f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG75.kt @@ -0,0 +1,22 @@ +/* + * 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.plugin.internal + +import org.gradle.api.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ConfigurationCacheStartParameterAccessorG75( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + @Suppress("DEPRECATION") + override val isConfigurationCacheRequested by lazy { + (gradle.startParameter as StartParameterInternal).isConfigurationCache + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG75(gradle) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index ca04049fb66..da6b5a55536 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -172,4 +172,5 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG6.Factory() factories[UnameExecutor.UnameExecutorVariantFactory::class] = UnameExecutorG6.UnameExecutorVariantFactoryG6() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG6.Factory() } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG6.kt new file mode 100644 index 00000000000..a226e973f71 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG6.kt @@ -0,0 +1,21 @@ +/* + * 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.plugin.internal + +import org.gradle.api.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ConfigurationCacheStartParameterAccessorG6( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested by lazy { + (gradle.startParameter as StartParameterInternal).isConfigurationCache + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG6(gradle) + } +}