KT-59034 Remove variant factory usage from OperationCompletionListener

This commit is contained in:
Nataliya.Valtman
2023-06-01 18:18:26 +02:00
committed by Space Team
parent d1b775f157
commit 833b5c12a1
4 changed files with 15 additions and 8 deletions
@@ -68,21 +68,20 @@ abstract class DefaultKotlinBasePlugin : KotlinBasePlugin {
override val pluginVersion: String = getKotlinPluginVersion(logger)
override fun apply(project: Project) {
checkGradleCompatibility()
project.registerDefaultVariantImplementations()
KotlinBuildStatsService.getOrCreateInstance(project)?.apply {
report(StringMetrics.KOTLIN_COMPILER_VERSION, pluginVersion)
}
BuildFlowService.registerIfAbsent(project)
checkGradleCompatibility()
project.gradle.projectsEvaluated {
whenBuildEvaluated(project)
}
addKotlinCompilerConfiguration(project)
project.registerDefaultVariantImplementations()
project.configurations.maybeCreate(PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply {
isVisible = false
@@ -18,6 +18,7 @@ import org.gradle.tooling.events.task.TaskFinishEvent
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder
import org.jetbrains.kotlin.gradle.plugin.StatisticsBuildFlowManager
import org.jetbrains.kotlin.gradle.plugin.internal.isProjectIsolationEnabled
import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
import org.jetbrains.kotlin.statistics.metrics.IStatisticsValuesConsumer
@@ -55,6 +56,11 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
}
val fusStatisticsAvailable = fusStatisticsAvailable(project.gradle)
//Workaround for known issues for Gradle 8+: https://github.com/gradle/gradle/issues/24887:
// when this OperationCompletionListener is called services can be already closed for Gradle 8,
// so there is a change that no VariantImplementationFactory will be found
val isProjectIsolationEnabled = project.isProjectIsolationEnabled
return project.gradle.sharedServices.registerIfAbsent(serviceName, BuildFlowService::class.java) { spec ->
if (fusStatisticsAvailable) {
KotlinBuildStatsService.applyIfInitialised {
@@ -63,7 +69,7 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
}
spec.parameters.configurationMetrics.set(project.provider {
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project)
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project, isProjectIsolationEnabled)
})
spec.parameters.fusStatisticsAvailable.set(fusStatisticsAvailable)
}.also { buildService ->
@@ -84,13 +84,14 @@ class KotlinBuildStatHandler {
internal fun collectConfigurationTimeMetrics(
project: Project,
sessionLogger: BuildSessionLogger,
isProjectIsolationEnabled: Boolean,
): MetricContainer {
val gradle = project.gradle
val configurationTimeMetrics = MetricContainer()
configurationTimeMetrics.put(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
configurationTimeMetrics.put(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
if (project.isProjectIsolationEnabled) { //support project isolation - KT-58768
if (isProjectIsolationEnabled) { //support project isolation - KT-58768
return configurationTimeMetrics
}
@@ -129,7 +129,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : IStatis
registerPre232IdeaStatsBean(mbs, gradle, log)
}
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
OperationCompletionListener { event ->
if (event is TaskFinishEvent) {
reportTaskIfNeed(event.descriptor.name)
@@ -220,7 +220,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : IStatis
/**
* Collect project general and configuration metrics at the start of a build
*/
open fun collectStartMetrics(project: Project): MetricContainer = MetricContainer()
open fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean): MetricContainer = MetricContainer()
open fun recordProjectsEvaluated(gradle: Gradle) {}
}
@@ -338,6 +338,7 @@ internal class DefaultKotlinBuildStatsService internal constructor(
KotlinBuildStatHandler().reportBuildFinished(sessionLogger, action, buildFailed, configurationTimeMetrics)
}
override fun collectStartMetrics(project: Project) = KotlinBuildStatHandler().collectConfigurationTimeMetrics(project, sessionLogger)
override fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean) =
KotlinBuildStatHandler().collectConfigurationTimeMetrics(project, sessionLogger, isProjectIsolationEnabled)
}