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 index c5506fe8dc1..24ce91f5832 100644 --- 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 @@ -6,38 +6,43 @@ package org.jetbrains.kotlin.gradle.plugin.internal import org.gradle.api.Project -import org.gradle.api.invocation.Gradle +import org.gradle.api.configuration.BuildFeatures import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory +import javax.inject.Inject /** * 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 + * + * As a replacement, Gradle provides [org.gradle.StartParameter.isConfigurationCacheRequested] since Gradle 7.6, which is deprecated + * in 8.5 release. + * + * As a replacement, Gradle provides [BuildFeatures.getConfigurationCache] service since Gradle 8.5. */ internal interface ConfigurationCacheStartParameterAccessor { val isConfigurationCacheRequested: Boolean interface Factory : VariantImplementationFactories.VariantImplementationFactory { - fun getInstance(gradle: Gradle): ConfigurationCacheStartParameterAccessor + fun getInstance(project: Project): ConfigurationCacheStartParameterAccessor } } internal class DefaultConfigurationCacheStartParameterAccessorVariantFactory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = DefaultConfigurationCacheStartParameterAccessor(gradle) + override fun getInstance(project: Project): ConfigurationCacheStartParameterAccessor = project + .objects + .newInstance(DefaultConfigurationCacheStartParameterAccessor::class.java) } -internal class DefaultConfigurationCacheStartParameterAccessor( - private val gradle: Gradle, +internal abstract class DefaultConfigurationCacheStartParameterAccessor @Inject constructor( + buildFeatures: BuildFeatures, ) : ConfigurationCacheStartParameterAccessor { - override val isConfigurationCacheRequested: Boolean by lazy { - @Suppress("DEPRECATION") // TODO: will be fixed separately via KT-64355 - gradle.startParameter.isConfigurationCacheRequested - } + override val isConfigurationCacheRequested: Boolean = buildFeatures.configurationCache.active.orElse(false).get() } internal val Project.isConfigurationCacheRequested get() = variantImplementationFactory() - .getInstance(gradle) + .getInstance(this) .isConfigurationCacheRequested 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 index dafe266b9aa..bc47eda0bb3 100644 --- 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal +import org.gradle.api.Project import org.gradle.api.internal.StartParameterInternal import org.gradle.api.invocation.Gradle @@ -16,6 +17,6 @@ internal class ConfigurationCacheStartParameterAccessorG70( } internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG70(gradle) + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG70(project.gradle) } } 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 index bffdfbbadd3..d60cbe6771e 100644 --- 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal +import org.gradle.api.Project import org.gradle.api.internal.StartParameterInternal import org.gradle.api.invocation.Gradle @@ -17,6 +18,6 @@ internal class ConfigurationCacheStartParameterAccessorG71( } internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG71(gradle) + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG71(project.gradle) } } 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 index a77c9a7695b..289817a509c 100644 --- 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal +import org.gradle.api.Project import org.gradle.api.internal.StartParameterInternal import org.gradle.api.invocation.Gradle @@ -17,6 +18,6 @@ internal class ConfigurationCacheStartParameterAccessorG74( } internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG74(gradle) + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG74(project.gradle) } } 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 index 8cfde577b8f..bfbbd2285d3 100644 --- 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal +import org.gradle.api.Project import org.gradle.api.internal.StartParameterInternal import org.gradle.api.invocation.Gradle @@ -17,6 +18,6 @@ internal class ConfigurationCacheStartParameterAccessorG75( } internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG75(gradle) + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG75(project.gradle) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index 11b091aeb6f..89dd9fe573c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -10,7 +10,6 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.model.ObjectFactory import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.internal.* import javax.inject.Inject @@ -140,4 +139,6 @@ private fun Project.registerVariantImplementations() { ProjectIsolationStartParameterAccessorG76.Factory() factories[CompatibilityConventionRegistrar.Factory::class] = CompatibilityConventionRegistrarG76.Factory() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = + ConfigurationCacheStartParameterAccessorG76.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG76.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG76.kt new file mode 100644 index 00000000000..3d786b2fabe --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG76.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2024 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 + +internal class ConfigurationCacheStartParameterAccessorG76( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested: Boolean by lazy { + gradle.startParameter.isConfigurationCacheRequested + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG76(project.gradle) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index e99c653bbfc..d2fad960372 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -10,7 +10,6 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.model.ObjectFactory import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.internal.* import javax.inject.Inject @@ -137,4 +136,6 @@ private fun Project.registerVariantImplementations() { val factories = VariantImplementationFactoriesConfigurator.get(gradle) factories[CompatibilityConventionRegistrar.Factory::class] = CompatibilityConventionRegistrarG80.Factory() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = + ConfigurationCacheStartParameterAccessorG80.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG80.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG80.kt new file mode 100644 index 00000000000..1ad52f210a2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG80.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2024 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 + +internal class ConfigurationCacheStartParameterAccessorG80( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested: Boolean by lazy { + gradle.startParameter.isConfigurationCacheRequested + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG80(project.gradle) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index a9f34affba3..a1a513478fd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -10,7 +10,6 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.model.ObjectFactory import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.internal.* import javax.inject.Inject @@ -137,4 +136,6 @@ private fun Project.registerVariantImplementations() { val factories = VariantImplementationFactoriesConfigurator.get(gradle) factories[CompatibilityConventionRegistrar.Factory::class] = CompatibilityConventionRegistrarG81.Factory() + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = + ConfigurationCacheStartParameterAccessorG81.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG81.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG81.kt new file mode 100644 index 00000000000..b86335ca37c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG81.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2024 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 + +internal class ConfigurationCacheStartParameterAccessorG81( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested: Boolean by lazy { + gradle.startParameter.isConfigurationCacheRequested + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG81(project.gradle) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt index febf83fa7e3..11fd1b3155e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/PluginWrappers.kt @@ -10,8 +10,9 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.model.ObjectFactory import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry +import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessorG82 import javax.inject.Inject private const val PLUGIN_VARIANT_NAME = "gradle82" @@ -132,7 +133,8 @@ open class KotlinApiPlugin : KotlinBaseApiPlugin() { } } -@Suppress("UnusedReceiverParameter") private fun Project.registerVariantImplementations() { - + val factories = VariantImplementationFactoriesConfigurator.get(gradle) + factories[ConfigurationCacheStartParameterAccessor.Factory::class] = + ConfigurationCacheStartParameterAccessorG82.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG82.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG82.kt new file mode 100644 index 00000000000..c702aa3a1c8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ConfigurationCacheStartParameterAccessorG82.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2024 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 + +internal class ConfigurationCacheStartParameterAccessorG82( + private val gradle: Gradle, +) : ConfigurationCacheStartParameterAccessor { + override val isConfigurationCacheRequested: Boolean by lazy { + gradle.startParameter.isConfigurationCacheRequested + } + + internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG82(project.gradle) + } +} \ 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 index a226e973f71..eafca813c28 100644 --- 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 @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.internal +import org.gradle.api.Project import org.gradle.api.internal.StartParameterInternal import org.gradle.api.invocation.Gradle @@ -16,6 +17,6 @@ internal class ConfigurationCacheStartParameterAccessorG6( } internal class Factory : ConfigurationCacheStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle) = ConfigurationCacheStartParameterAccessorG6(gradle) + override fun getInstance(project: Project) = ConfigurationCacheStartParameterAccessorG6(project.gradle) } }