KT-59034 Remove variant factory usage from OperationCompletionListener
This commit is contained in:
committed by
Space Team
parent
d1b775f157
commit
833b5c12a1
+2
-3
@@ -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
|
||||
|
||||
+7
-1
@@ -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 ->
|
||||
|
||||
+2
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user