From f5de0f9399972909aba04ad355c44900d6c3649f Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 15 Feb 2024 22:06:32 +0100 Subject: [PATCH] [Gradle] Use BuildFeatures service to get project isolation feature state ^KT-64355 Verification Pending --- .../gradle/plugin/KotlinPluginWrapper.kt | 2 +- .../ProjectIsolationStartParameterAccessor.kt | 32 +++++++++---------- ...ojectIsolationStartParameterAccessorG70.kt | 4 +-- ...ojectIsolationStartParameterAccessorG71.kt | 5 +-- ...ojectIsolationStartParameterAccessorG74.kt | 5 +-- ...ojectIsolationStartParameterAccessorG75.kt | 5 +-- ...ojectIsolationStartParameterAccessorG76.kt | 5 +-- .../kotlin/gradle/plugin/PluginWrappers.kt | 2 ++ ...ojectIsolationStartParameterAccessorG80.kt | 24 ++++++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 2 ++ ...ojectIsolationStartParameterAccessorG81.kt | 24 ++++++++++++++ .../kotlin/gradle/plugin/PluginWrappers.kt | 4 +++ ...ojectIsolationStartParameterAccessorG82.kt | 24 ++++++++++++++ ...rojectIsolationStartParameterAccessorG6.kt | 4 +-- 14 files changed, 113 insertions(+), 29 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG80.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG81.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG82.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 7ad309ccada..996c8f08a6e 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 @@ -175,7 +175,7 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin { factories.putIfAbsent( ProjectIsolationStartParameterAccessor.Factory::class, - DefaultProjectIsolationStartParameterAccessorVariantFactory() + DefaultProjectIsolationStartParameterAccessor.Factory() ) factories.putIfAbsent( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessor.kt index 65036cc1d66..c863239335b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessor.kt @@ -6,38 +6,38 @@ package org.jetbrains.kotlin.gradle.plugin.internal import org.gradle.api.Project -import org.gradle.api.internal.StartParameterInternal -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 org.jetbrains.kotlin.gradle.utils.newInstance +import javax.inject.Inject /** - * Gradle 8.0 has changed internal method return type to `Option.Value` from previous `BuildOption.Value`. + * Gradle 8.0 has changed the internal method return type to `Option.Value` from previous `BuildOption.Value`. + * + * Gradle 8.5 has introduced an official API via [BuildFeatures] service. */ interface ProjectIsolationStartParameterAccessor { val isProjectIsolationEnabled: Boolean interface Factory : VariantImplementationFactories.VariantImplementationFactory { - fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor + fun getInstance(project: Project): ProjectIsolationStartParameterAccessor } } -internal class DefaultProjectIsolationStartParameterAccessorVariantFactory : - ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { - return DefaultProjectIsolationStartParameterAccessor(gradle) - } -} - -internal class DefaultProjectIsolationStartParameterAccessor( - private val gradle: Gradle +internal abstract class DefaultProjectIsolationStartParameterAccessor @Inject constructor( + buildFeatures: BuildFeatures ) : ProjectIsolationStartParameterAccessor { - override val isProjectIsolationEnabled: Boolean by lazy { - (gradle.startParameter as StartParameterInternal).isolatedProjects.get() + override val isProjectIsolationEnabled: Boolean = buildFeatures.isolatedProjects.active.orElse(false).get() + + internal class Factory : ProjectIsolationStartParameterAccessor.Factory { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor = project + .objects + .newInstance() } } internal val Project.isProjectIsolationEnabled get() = variantImplementationFactory() - .getInstance(gradle) + .getInstance(this) .isProjectIsolationEnabled diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG70.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG70.kt index 4a07fd9ace4..76e9ad00ff4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG70.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG70.kt @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.gradle.plugin.internal -import org.gradle.api.invocation.Gradle +import org.gradle.api.Project internal class ProjectIsolationStartParameterAccessorG70() : ProjectIsolationStartParameterAccessor { override val isProjectIsolationEnabled: Boolean get() = false internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { return ProjectIsolationStartParameterAccessorG70() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG71.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG71.kt index ceb6cee7c79..8a66f39b95f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG71.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle71/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG71.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,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG71( } internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { - return ProjectIsolationStartParameterAccessorG71(gradle) + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG71(project.gradle) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG74.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG74.kt index d945a39f120..e2defdfd763 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG74.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle74/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG74.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,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG74( } internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { - return ProjectIsolationStartParameterAccessorG74(gradle) + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG74(project.gradle) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG75.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG75.kt index 00e0c98cb42..783c8bd2255 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG75.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle75/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG75.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,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG75( } internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { - return ProjectIsolationStartParameterAccessorG75(gradle) + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG75(project.gradle) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG76.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG76.kt index 5e150fd3ef3..7b505adc8f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG76.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle76/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG76.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,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG76( } internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { - return ProjectIsolationStartParameterAccessorG76(gradle) + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG76(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 d2fad960372..aa2999e0b98 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 @@ -138,4 +138,6 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG80.Factory() factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG80.Factory() + factories[ProjectIsolationStartParameterAccessor.Factory::class] = + ProjectIsolationStartParameterAccessorG80.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG80.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG80.kt new file mode 100644 index 00000000000..8a9ed3dc7ea --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle80/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG80.kt @@ -0,0 +1,24 @@ +/* + * 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.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ProjectIsolationStartParameterAccessorG80( + private val gradle: Gradle +) : ProjectIsolationStartParameterAccessor { + override val isProjectIsolationEnabled: Boolean by lazy { + (gradle.startParameter as StartParameterInternal).isolatedProjects.get() + } + + internal class Factory : ProjectIsolationStartParameterAccessor.Factory { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG80(project.gradle) + } + } +} 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 a1a513478fd..2f53b2bd854 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 @@ -138,4 +138,6 @@ private fun Project.registerVariantImplementations() { CompatibilityConventionRegistrarG81.Factory() factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG81.Factory() + factories[ProjectIsolationStartParameterAccessor.Factory::class] = + ProjectIsolationStartParameterAccessorG81.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG81.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG81.kt new file mode 100644 index 00000000000..1c75f9b9505 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle81/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG81.kt @@ -0,0 +1,24 @@ +/* + * 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.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ProjectIsolationStartParameterAccessorG81( + private val gradle: Gradle +) : ProjectIsolationStartParameterAccessor { + override val isProjectIsolationEnabled: Boolean by lazy { + (gradle.startParameter as StartParameterInternal).isolatedProjects.get() + } + + internal class Factory : ProjectIsolationStartParameterAccessor.Factory { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG81(project.gradle) + } + } +} 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 11fd1b3155e..033aef87bc4 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 @@ -13,6 +13,8 @@ import org.gradle.api.file.SourceDirectorySet import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessor import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessorG82 +import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessor +import org.jetbrains.kotlin.gradle.plugin.internal.ProjectIsolationStartParameterAccessorG82 import javax.inject.Inject private const val PLUGIN_VARIANT_NAME = "gradle82" @@ -137,4 +139,6 @@ private fun Project.registerVariantImplementations() { val factories = VariantImplementationFactoriesConfigurator.get(gradle) factories[ConfigurationCacheStartParameterAccessor.Factory::class] = ConfigurationCacheStartParameterAccessorG82.Factory() + factories[ProjectIsolationStartParameterAccessor.Factory::class] = + ProjectIsolationStartParameterAccessorG82.Factory() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG82.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG82.kt new file mode 100644 index 00000000000..44e700dd49d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle82/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG82.kt @@ -0,0 +1,24 @@ +/* + * 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.internal.StartParameterInternal +import org.gradle.api.invocation.Gradle + +internal class ProjectIsolationStartParameterAccessorG82( + private val gradle: Gradle +) : ProjectIsolationStartParameterAccessor { + override val isProjectIsolationEnabled: Boolean by lazy { + (gradle.startParameter as StartParameterInternal).isolatedProjects.get() + } + + internal class Factory : ProjectIsolationStartParameterAccessor.Factory { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { + return ProjectIsolationStartParameterAccessorG82(project.gradle) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG6.kt index 6275db92e65..bb7e11f8216 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG6.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/ProjectIsolationStartParameterAccessorG6.kt @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.gradle.plugin.internal -import org.gradle.api.invocation.Gradle +import org.gradle.api.Project internal class ProjectIsolationStartParameterAccessorG6() : ProjectIsolationStartParameterAccessor { override val isProjectIsolationEnabled: Boolean get() = false internal class Factory : ProjectIsolationStartParameterAccessor.Factory { - override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { + override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor { return ProjectIsolationStartParameterAccessorG6() } }