diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt index de388830abd..64a1b87ae68 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt @@ -49,7 +49,7 @@ internal abstract class KotlinGradleBuildServices : BuildService = project.gradle.sharedServices.registerIfAbsent( + fun registerIfAbsent(project: Project, kotlinVersion: String): Provider = project.gradle.sharedServices.registerIfAbsent( "kotlin-build-service-${KotlinGradleBuildServices::class.java.canonicalName}_${KotlinGradleBuildServices::class.java.classLoader.hashCode()}", KotlinGradleBuildServices::class.java ) { service -> @@ -57,10 +57,10 @@ internal abstract class KotlinGradleBuildServices : BuildService()) @@ -73,7 +73,7 @@ internal abstract class KotlinGradleBuildServices : BuildService { } project.registerCommonizerClasspathConfigurationIfNecessary() - KotlinGradleBuildServices.registerIfAbsent(project).get() + KotlinGradleBuildServices.registerIfAbsent(project, kotlinPluginVersion).get() KotlinGradleBuildServices.detectKotlinPluginLoadedInMultipleProjects(project, kotlinPluginVersion) @@ -98,7 +98,7 @@ abstract class KotlinBasePluginWrapper : Plugin { buildMetricReporter?.also { BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(it) } - HttpReportService.registerIfAbsent(project) + HttpReportService.registerIfAbsent(project, kotlinPluginVersion) ?.also { BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(it) } project.tasks.withType(AbstractKotlinCompile::class.java).configureEach { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatListener.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatListener.kt index b1e1799f4f6..e71563610c4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatListener.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatListener.kt @@ -34,6 +34,7 @@ enum class TaskExecutionState { class KotlinBuildStatListener( val projectName: String, val label: String?, + val kotlinVersion: String, val reportStatistics: List ) : OperationCompletionListener, AutoCloseable { @@ -52,7 +53,13 @@ class KotlinBuildStatListener( return taskPath.contains("Kotlin") && (TaskExecutionResults[taskPath] != null) } - internal fun prepareData(event: TaskFinishEvent, projectName:String, uuid: String, label: String?): CompileStatData? { + internal fun prepareData( + event: TaskFinishEvent, + projectName: String, + uuid: String, + label: String?, + kotlinVersion: String + ): CompileStatData? { val result = event.result val taskPath = event.descriptor.taskPath val durationMs = result.endTime - result.startTime @@ -63,10 +70,10 @@ class KotlinBuildStatListener( else -> TaskExecutionState.SUCCESS } - is TaskSkippedResult -> TaskExecutionState.SKIPPED - is TaskFailureResult -> TaskExecutionState.FAILED - else -> TaskExecutionState.UNKNOWN - } + is TaskSkippedResult -> TaskExecutionState.SKIPPED + is TaskFailureResult -> TaskExecutionState.FAILED + else -> TaskExecutionState.UNKNOWN + } if (!availableForStat(taskPath)) { return null @@ -87,7 +94,7 @@ class KotlinBuildStatListener( buildTimesMs = buildTimesMs, perfData = perfData, projectName = projectName, taskName = taskPath, changes = changes, tags = taskExecutionResult?.taskInfo?.properties?.map { it.name } ?: emptyList(), nonIncrementalAttributes = taskExecutionResult?.buildMetrics?.buildAttributes?.asMap() ?: emptyMap(), - hostName = hostName, kotlinVersion = "1.6", buildUuid = uuid, timeInMillis = System.currentTimeMillis() + hostName = hostName, kotlinVersion = kotlinVersion, buildUuid = uuid, timeInMillis = System.currentTimeMillis() ) } @@ -96,7 +103,7 @@ class KotlinBuildStatListener( override fun onFinish(event: FinishEvent?) { if (event is TaskFinishEvent) { val (collectDataDuration, compileStatData) = measureTimeMillisWithResult { - prepareData(event, projectName, buildUuid, label) + prepareData(event, projectName, buildUuid, label, kotlinVersion) } log.debug("Collect data takes $collectDataDuration: $compileStatData") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt index 4144c967f2f..ee60373d445 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/HttpReportService.kt @@ -33,13 +33,14 @@ abstract class HttpReportService : BuildService, var uuid: String var projectName: String var httpSettings: HttpReportSettings + var kotlinVersion: String } private val log = Logging.getLogger(this.javaClass) override fun onFinish(event: FinishEvent?) { if (event is TaskFinishEvent) { - val data = prepareData(event, parameters.projectName, parameters.uuid, parameters.label) + val data = prepareData(event, parameters.projectName, parameters.uuid, parameters.label, parameters.kotlinVersion) data?.also { executorService.submit { report(data) } } } } @@ -50,7 +51,7 @@ abstract class HttpReportService : BuildService, companion object { - fun registerIfAbsent(project: Project): Provider? { + fun registerIfAbsent(project: Project, kotlinVersion: String): Provider? { val rootProject = project.gradle.rootProject val reportingSettings = reportingSettings(rootProject) @@ -63,6 +64,7 @@ abstract class HttpReportService : BuildService, it.parameters.projectName = rootProject.name it.parameters.uuid = UUID.randomUUID().toString() it.parameters.httpSettings = httpSettings + it.parameters.kotlinVersion = kotlinVersion }!! }