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 val pluginVersion: String = getKotlinPluginVersion(logger)
|
||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
|
checkGradleCompatibility()
|
||||||
|
|
||||||
|
project.registerDefaultVariantImplementations()
|
||||||
KotlinBuildStatsService.getOrCreateInstance(project)?.apply {
|
KotlinBuildStatsService.getOrCreateInstance(project)?.apply {
|
||||||
report(StringMetrics.KOTLIN_COMPILER_VERSION, pluginVersion)
|
report(StringMetrics.KOTLIN_COMPILER_VERSION, pluginVersion)
|
||||||
}
|
}
|
||||||
BuildFlowService.registerIfAbsent(project)
|
BuildFlowService.registerIfAbsent(project)
|
||||||
|
|
||||||
checkGradleCompatibility()
|
|
||||||
|
|
||||||
project.gradle.projectsEvaluated {
|
project.gradle.projectsEvaluated {
|
||||||
whenBuildEvaluated(project)
|
whenBuildEvaluated(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
addKotlinCompilerConfiguration(project)
|
addKotlinCompilerConfiguration(project)
|
||||||
|
|
||||||
project.registerDefaultVariantImplementations()
|
|
||||||
|
|
||||||
project.configurations.maybeCreate(PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply {
|
project.configurations.maybeCreate(PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply {
|
||||||
isVisible = false
|
isVisible = false
|
||||||
|
|||||||
+7
-1
@@ -18,6 +18,7 @@ import org.gradle.tooling.events.task.TaskFinishEvent
|
|||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder
|
import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder
|
||||||
import org.jetbrains.kotlin.gradle.plugin.StatisticsBuildFlowManager
|
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.gradle.utils.isConfigurationCacheAvailable
|
||||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||||
import org.jetbrains.kotlin.statistics.metrics.IStatisticsValuesConsumer
|
import org.jetbrains.kotlin.statistics.metrics.IStatisticsValuesConsumer
|
||||||
@@ -55,6 +56,11 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
|
|||||||
}
|
}
|
||||||
|
|
||||||
val fusStatisticsAvailable = fusStatisticsAvailable(project.gradle)
|
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 ->
|
return project.gradle.sharedServices.registerIfAbsent(serviceName, BuildFlowService::class.java) { spec ->
|
||||||
if (fusStatisticsAvailable) {
|
if (fusStatisticsAvailable) {
|
||||||
KotlinBuildStatsService.applyIfInitialised {
|
KotlinBuildStatsService.applyIfInitialised {
|
||||||
@@ -63,7 +69,7 @@ internal abstract class BuildFlowService : BuildService<BuildFlowService.Paramet
|
|||||||
}
|
}
|
||||||
|
|
||||||
spec.parameters.configurationMetrics.set(project.provider {
|
spec.parameters.configurationMetrics.set(project.provider {
|
||||||
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project)
|
KotlinBuildStatsService.getInstance()?.collectStartMetrics(project, isProjectIsolationEnabled)
|
||||||
})
|
})
|
||||||
spec.parameters.fusStatisticsAvailable.set(fusStatisticsAvailable)
|
spec.parameters.fusStatisticsAvailable.set(fusStatisticsAvailable)
|
||||||
}.also { buildService ->
|
}.also { buildService ->
|
||||||
|
|||||||
+2
-1
@@ -84,13 +84,14 @@ class KotlinBuildStatHandler {
|
|||||||
internal fun collectConfigurationTimeMetrics(
|
internal fun collectConfigurationTimeMetrics(
|
||||||
project: Project,
|
project: Project,
|
||||||
sessionLogger: BuildSessionLogger,
|
sessionLogger: BuildSessionLogger,
|
||||||
|
isProjectIsolationEnabled: Boolean,
|
||||||
): MetricContainer {
|
): MetricContainer {
|
||||||
val gradle = project.gradle
|
val gradle = project.gradle
|
||||||
val configurationTimeMetrics = MetricContainer()
|
val configurationTimeMetrics = MetricContainer()
|
||||||
configurationTimeMetrics.put(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
|
configurationTimeMetrics.put(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
|
||||||
configurationTimeMetrics.put(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
|
configurationTimeMetrics.put(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
|
||||||
|
|
||||||
if (project.isProjectIsolationEnabled) { //support project isolation - KT-58768
|
if (isProjectIsolationEnabled) { //support project isolation - KT-58768
|
||||||
return configurationTimeMetrics
|
return configurationTimeMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -129,7 +129,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : IStatis
|
|||||||
registerPre232IdeaStatsBean(mbs, gradle, log)
|
registerPre232IdeaStatsBean(mbs, gradle, log)
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
|
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
|
||||||
OperationCompletionListener { event ->
|
OperationCompletionListener { event ->
|
||||||
if (event is TaskFinishEvent) {
|
if (event is TaskFinishEvent) {
|
||||||
reportTaskIfNeed(event.descriptor.name)
|
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
|
* 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) {}
|
open fun recordProjectsEvaluated(gradle: Gradle) {}
|
||||||
}
|
}
|
||||||
@@ -338,6 +338,7 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
KotlinBuildStatHandler().reportBuildFinished(sessionLogger, action, buildFailed, configurationTimeMetrics)
|
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