[Gradle] Use BuildFeatures service to get project isolation feature state

^KT-64355 Verification Pending
This commit is contained in:
Yahor Berdnikau
2024-02-15 22:06:32 +01:00
committed by Space Team
parent e405072419
commit f5de0f9399
14 changed files with 113 additions and 29 deletions
@@ -175,7 +175,7 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
factories.putIfAbsent( factories.putIfAbsent(
ProjectIsolationStartParameterAccessor.Factory::class, ProjectIsolationStartParameterAccessor.Factory::class,
DefaultProjectIsolationStartParameterAccessorVariantFactory() DefaultProjectIsolationStartParameterAccessor.Factory()
) )
factories.putIfAbsent( factories.putIfAbsent(
@@ -6,38 +6,38 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.internal.StartParameterInternal import org.gradle.api.configuration.BuildFeatures
import org.gradle.api.invocation.Gradle
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory 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<Boolean>` from previous `BuildOption.Value<Boolean>`. * Gradle 8.0 has changed the internal method return type to `Option.Value<Boolean>` from previous `BuildOption.Value<Boolean>`.
*
* Gradle 8.5 has introduced an official API via [BuildFeatures] service.
*/ */
interface ProjectIsolationStartParameterAccessor { interface ProjectIsolationStartParameterAccessor {
val isProjectIsolationEnabled: Boolean val isProjectIsolationEnabled: Boolean
interface Factory : VariantImplementationFactories.VariantImplementationFactory { interface Factory : VariantImplementationFactories.VariantImplementationFactory {
fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor fun getInstance(project: Project): ProjectIsolationStartParameterAccessor
} }
} }
internal class DefaultProjectIsolationStartParameterAccessorVariantFactory : internal abstract class DefaultProjectIsolationStartParameterAccessor @Inject constructor(
ProjectIsolationStartParameterAccessor.Factory { buildFeatures: BuildFeatures
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor {
return DefaultProjectIsolationStartParameterAccessor(gradle)
}
}
internal class DefaultProjectIsolationStartParameterAccessor(
private val gradle: Gradle
) : ProjectIsolationStartParameterAccessor { ) : ProjectIsolationStartParameterAccessor {
override val isProjectIsolationEnabled: Boolean by lazy { override val isProjectIsolationEnabled: Boolean = buildFeatures.isolatedProjects.active.orElse(false).get()
(gradle.startParameter as StartParameterInternal).isolatedProjects.get()
internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor = project
.objects
.newInstance<DefaultProjectIsolationStartParameterAccessor>()
} }
} }
internal val Project.isProjectIsolationEnabled internal val Project.isProjectIsolationEnabled
get() = variantImplementationFactory<ProjectIsolationStartParameterAccessor.Factory>() get() = variantImplementationFactory<ProjectIsolationStartParameterAccessor.Factory>()
.getInstance(gradle) .getInstance(this)
.isProjectIsolationEnabled .isProjectIsolationEnabled
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.invocation.Gradle import org.gradle.api.Project
internal class ProjectIsolationStartParameterAccessorG70() : ProjectIsolationStartParameterAccessor { internal class ProjectIsolationStartParameterAccessorG70() : ProjectIsolationStartParameterAccessor {
override val isProjectIsolationEnabled: Boolean override val isProjectIsolationEnabled: Boolean
get() = false get() = false
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG70() return ProjectIsolationStartParameterAccessorG70()
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.Project
import org.gradle.api.internal.StartParameterInternal import org.gradle.api.internal.StartParameterInternal
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
@@ -16,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG71(
} }
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG71(gradle) return ProjectIsolationStartParameterAccessorG71(project.gradle)
} }
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.Project
import org.gradle.api.internal.StartParameterInternal import org.gradle.api.internal.StartParameterInternal
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
@@ -16,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG74(
} }
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG74(gradle) return ProjectIsolationStartParameterAccessorG74(project.gradle)
} }
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.Project
import org.gradle.api.internal.StartParameterInternal import org.gradle.api.internal.StartParameterInternal
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
@@ -16,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG75(
} }
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG75(gradle) return ProjectIsolationStartParameterAccessorG75(project.gradle)
} }
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.Project
import org.gradle.api.internal.StartParameterInternal import org.gradle.api.internal.StartParameterInternal
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
@@ -16,8 +17,8 @@ internal class ProjectIsolationStartParameterAccessorG76(
} }
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG76(gradle) return ProjectIsolationStartParameterAccessorG76(project.gradle)
} }
} }
} }
@@ -138,4 +138,6 @@ private fun Project.registerVariantImplementations() {
CompatibilityConventionRegistrarG80.Factory() CompatibilityConventionRegistrarG80.Factory()
factories[ConfigurationCacheStartParameterAccessor.Factory::class] = factories[ConfigurationCacheStartParameterAccessor.Factory::class] =
ConfigurationCacheStartParameterAccessorG80.Factory() ConfigurationCacheStartParameterAccessorG80.Factory()
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
ProjectIsolationStartParameterAccessorG80.Factory()
} }
@@ -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)
}
}
}
@@ -138,4 +138,6 @@ private fun Project.registerVariantImplementations() {
CompatibilityConventionRegistrarG81.Factory() CompatibilityConventionRegistrarG81.Factory()
factories[ConfigurationCacheStartParameterAccessor.Factory::class] = factories[ConfigurationCacheStartParameterAccessor.Factory::class] =
ConfigurationCacheStartParameterAccessorG81.Factory() ConfigurationCacheStartParameterAccessorG81.Factory()
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
ProjectIsolationStartParameterAccessorG81.Factory()
} }
@@ -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)
}
}
}
@@ -13,6 +13,8 @@ import org.gradle.api.file.SourceDirectorySet
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessor import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessor
import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationCacheStartParameterAccessorG82 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 import javax.inject.Inject
private const val PLUGIN_VARIANT_NAME = "gradle82" private const val PLUGIN_VARIANT_NAME = "gradle82"
@@ -137,4 +139,6 @@ private fun Project.registerVariantImplementations() {
val factories = VariantImplementationFactoriesConfigurator.get(gradle) val factories = VariantImplementationFactoriesConfigurator.get(gradle)
factories[ConfigurationCacheStartParameterAccessor.Factory::class] = factories[ConfigurationCacheStartParameterAccessor.Factory::class] =
ConfigurationCacheStartParameterAccessorG82.Factory() ConfigurationCacheStartParameterAccessorG82.Factory()
factories[ProjectIsolationStartParameterAccessor.Factory::class] =
ProjectIsolationStartParameterAccessorG82.Factory()
} }
@@ -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)
}
}
}
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.gradle.plugin.internal package org.jetbrains.kotlin.gradle.plugin.internal
import org.gradle.api.invocation.Gradle import org.gradle.api.Project
internal class ProjectIsolationStartParameterAccessorG6() : ProjectIsolationStartParameterAccessor { internal class ProjectIsolationStartParameterAccessorG6() : ProjectIsolationStartParameterAccessor {
override val isProjectIsolationEnabled: Boolean override val isProjectIsolationEnabled: Boolean
get() = false get() = false
internal class Factory : ProjectIsolationStartParameterAccessor.Factory { internal class Factory : ProjectIsolationStartParameterAccessor.Factory {
override fun getInstance(gradle: Gradle): ProjectIsolationStartParameterAccessor { override fun getInstance(project: Project): ProjectIsolationStartParameterAccessor {
return ProjectIsolationStartParameterAccessorG6() return ProjectIsolationStartParameterAccessorG6()
} }
} }