From 3fd9e22f373d409d7c3cd2d06f4218202b7b0872 Mon Sep 17 00:00:00 2001 From: "Nataliya.Valtman" Date: Thu, 21 Dec 2023 13:26:54 +0100 Subject: [PATCH] Remove KotlinBuildStatsService.getInstance() calls #KT-58768 In Progress --- .../kotlin/gradle/FusStatisticsIT.kt | 4 +-- .../gradle/plugin/PropertiesProvider.kt | 15 +--------- .../plugin/statistics/BuildFusService.kt | 25 ++++++++++------ .../statistics/KotlinBuildStatHandler.kt | 7 +++-- .../statistics/KotlinBuildStatsService.kt | 2 +- .../MultiplatformPlatformReportSetupAction.kt | 5 +++- .../NonSynchronizedMetricsContainer.kt | 12 ++------ .../targets/js/ir/KotlinJsIrTargetPreset.kt | 16 +++++----- .../KotlinMetadataTargetConfigurator.kt | 11 ++----- .../configuration/KotlinCompileConfig.kt | 3 +- .../kotlin/gradle/utils/reportUtils.kt | 29 +++++++++++++++++++ 11 files changed, 72 insertions(+), 57 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/reportUtils.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt index 3e252a9539f..dd76a5c91d2 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/FusStatisticsIT.kt @@ -25,6 +25,7 @@ class FusStatisticsIT : KGPDaemonsBaseTest() { "GRADLE_VERSION", "KOTLIN_STDLIB_VERSION", "KOTLIN_COMPILER_VERSION", + "USE_CLASSPATH_SNAPSHOT=true" ) private val GradleProject.fusStatisticsPath: Path @@ -56,7 +57,7 @@ class FusStatisticsIT : KGPDaemonsBaseTest() { fun testMetricCollectingOfApplyingCocoapodsPlugin(gradleVersion: GradleVersion) { project("native-cocoapods-template", gradleVersion) { build("assemble", "-Pkotlin.session.logger.root.path=$projectPath") { - assertFileContains(fusStatisticsPath, "COCOAPODS_PLUGIN_ENABLED=true") + assertFileContains(fusStatisticsPath, "COCOAPODS_PLUGIN_ENABLED=true", "ENABLED_HMPP=true", "MPP_PLATFORMS") } } } @@ -122,7 +123,6 @@ class FusStatisticsIT : KGPDaemonsBaseTest() { gradleVersion, ) { build("compileKotlin", "-Pkotlin.session.logger.root.path=$projectPath") { - val fusStatisticsPath = fusStatisticsPath assertFileContains( fusStatisticsPath, *expectedMetrics, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt index c59530a29f1..6f37e1604d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/PropertiesProvider.kt @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.MPP_13X_FLAGS_SET_BY_PLUGIN import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnosticOncePerBuild -import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinIrJsGeneratedTSValidationStrategy import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrOutputGranularity import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy @@ -58,7 +57,6 @@ import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader import org.jetbrains.kotlin.gradle.utils.localProperties import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.presetName -import org.jetbrains.kotlin.statistics.metrics.StringMetrics import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly import org.jetbrains.kotlin.util.prefixIfNot @@ -158,18 +156,7 @@ internal class PropertiesProvider private constructor(private val project: Proje get() = booleanProperty("kotlin.incremental.usePreciseJavaTracking") val useClasspathSnapshot: Boolean - get() { - val reporter = KotlinBuildStatsService.getInstance() - - val gradleProperty = booleanProperty(KOTLIN_INCREMENTAL_USE_CLASSPATH_SNAPSHOT) - if (gradleProperty != null) { - reporter?.report(StringMetrics.USE_CLASSPATH_SNAPSHOT, gradleProperty.toString()) - return gradleProperty - } else { - reporter?.report(StringMetrics.USE_CLASSPATH_SNAPSHOT, "default-true") - return true - } - } + get() = booleanProperty(KOTLIN_INCREMENTAL_USE_CLASSPATH_SNAPSHOT) ?: true val useKotlinAbiSnapshot: Boolean get() = booleanProperty(KOTLIN_ABI_SNAPSHOT) ?: false diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFusService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFusService.kt index 721d7dc4748..863d47a1474 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFusService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFusService.kt @@ -23,6 +23,7 @@ import org.gradle.util.GradleVersion import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric import org.jetbrains.kotlin.gradle.logging.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.BuildEventsListenerRegistryHolder +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.StatisticsBuildFlowManager import org.jetbrains.kotlin.gradle.plugin.internal.isConfigurationCacheRequested import org.jetbrains.kotlin.gradle.plugin.internal.isProjectIsolationEnabled @@ -65,10 +66,11 @@ abstract class BuildFusService : BuildService, AutoC internal fun reportFusMetrics(reportAction: (StatisticsValuesConsumer) -> Unit) { reportAction(fusMetricsConsumer) } + private val buildId = randomUUID().toString() companion object { - private val serviceName = "${BuildFusService::class.simpleName}_${BuildFusService::class.java.classLoader.hashCode()}" + internal val serviceName = "${BuildFusService::class.simpleName}_${BuildFusService::class.java.classLoader.hashCode()}" fun registerIfAbsent(project: Project, pluginVersion: String) = registerIfAbsentImpl(project, pluginVersion).also { serviceProvider -> @@ -89,10 +91,12 @@ abstract class BuildFusService : BuildService, AutoC project.gradle.sharedServices.registrations.findByName(serviceName)?.let { @Suppress("UNCHECKED_CAST") - return (it.service as Provider).also { - it.get().parameters.configurationMetrics.add(project.provider { - KotlinBuildStatHandler.collectProjectConfigurationTimeMetrics(project) - }) + return (it.service as Provider).also { buildServiceProvider -> + project.afterEvaluate { + buildServiceProvider.get().parameters.configurationMetrics.add( + project.provider { KotlinBuildStatHandler.collectProjectConfigurationTimeMetrics(project) } + ) + } } } @@ -102,6 +106,7 @@ abstract class BuildFusService : BuildService, AutoC } val buildReportOutputs = reportingSettings(project).buildReportOutputs + val useClasspathSnapshot = PropertiesProvider(project).useClasspathSnapshot val gradle = project.gradle //Workaround for known issues for Gradle 8+: https://github.com/gradle/gradle/issues/24887: @@ -113,14 +118,11 @@ abstract class BuildFusService : BuildService, AutoC KotlinBuildStatHandler.collectGeneralConfigurationTimeMetrics( gradle, buildReportOutputs, + useClasspathSnapshot, pluginVersion, isProjectIsolationEnabled ) }) - - spec.parameters.configurationMetrics.add(project.provider { - KotlinBuildStatHandler.collectProjectConfigurationTimeMetrics(project) - }) spec.parameters.useBuildFinishFlowAction.set(GradleVersion.current().baseVersion >= GradleVersion.version("8.1")) }.also { buildService -> @Suppress("DEPRECATION") @@ -133,6 +135,11 @@ abstract class BuildFusService : BuildService, AutoC if (GradleVersion.current().baseVersion >= GradleVersion.version("8.1")) { StatisticsBuildFlowManager.getInstance(project).subscribeForBuildResult() } + project.afterEvaluate { + buildService.get().parameters.configurationMetrics.add(project.provider { + KotlinBuildStatHandler.collectProjectConfigurationTimeMetrics(project) + }) + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt index 3c0af93c71f..6783857c426 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt @@ -53,14 +53,15 @@ class KotlinBuildStatHandler { internal fun collectGeneralConfigurationTimeMetrics( gradle: Gradle, buildReportOutputs: List, + useClasspathSnapshot: Boolean, pluginVersion: String, isProjectIsolationEnabled: Boolean, ): MetricContainer { val configurationTimeMetrics = MetricContainer() - configurationTimeMetrics.put(StringMetrics.KOTLIN_COMPILER_VERSION, pluginVersion) - val statisticOverhead = measureTimeMillis { + configurationTimeMetrics.put(StringMetrics.KOTLIN_COMPILER_VERSION, pluginVersion) + configurationTimeMetrics.put(StringMetrics.USE_CLASSPATH_SNAPSHOT, useClasspathSnapshot.toString()) buildReportOutputs.forEach { when (it) { BuildReportType.BUILD_SCAN -> configurationTimeMetrics.put(BooleanMetrics.BUILD_SCAN_BUILD_REPORT, true) @@ -89,7 +90,7 @@ class KotlinBuildStatHandler { } /** - * Collect project's configuration metrics + * Collect project's configuration metrics including applied plugins. It should be called inside afterEvaluate block. */ internal fun collectProjectConfigurationTimeMetrics( project: Project, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt index e6c1c20dfe4..f10c5fbd822 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt @@ -66,7 +66,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : Statist */ @JvmStatic @Synchronized - fun getInstance(): KotlinBuildStatsService? { + private fun getInstance(): KotlinBuildStatsService? { if (statisticsIsEnabled != true) { return null } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/MultiplatformPlatformReportSetupAction.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/MultiplatformPlatformReportSetupAction.kt index b4baa4b2215..73c406e7f50 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/MultiplatformPlatformReportSetupAction.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/MultiplatformPlatformReportSetupAction.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.statistics import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupAction import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget +import org.jetbrains.kotlin.gradle.utils.addConfigurationMetrics import org.jetbrains.kotlin.statistics.metrics.StringMetrics internal val MultiplatformBuildStatsReportSetupAction = KotlinProjectSetupAction { @@ -15,6 +16,8 @@ internal val MultiplatformBuildStatsReportSetupAction = KotlinProjectSetupAction /* Report the platform to tbe build stats service */ val targetName = if (target is KotlinNativeTarget) target.konanTarget.name else target.platformType.name - KotlinBuildStatsService.getInstance()?.report(StringMetrics.MPP_PLATFORMS, targetName) + project.addConfigurationMetrics { + it.put(StringMetrics.MPP_PLATFORMS, targetName) + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/NonSynchronizedMetricsContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/NonSynchronizedMetricsContainer.kt index 4ceb72031c5..492d1a75a6c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/NonSynchronizedMetricsContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/NonSynchronizedMetricsContainer.kt @@ -28,23 +28,17 @@ class NonSynchronizedMetricsContainer : StatisticsValuesConsumer, Serializable { private val stringMetrics = HashMap, IMetricContainer>() override fun report(metric: BooleanMetrics, value: Boolean, subprojectName: String?, weight: Long?): Boolean { - booleanMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.let { metricContainer -> - metricContainer.addValue(value, weight) - } + booleanMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.addValue(value, weight) return true } override fun report(metric: NumericalMetrics, value: Long, subprojectName: String?, weight: Long?): Boolean { - numericalMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.let { metricContainer -> - metricContainer.addValue(value, weight) - } + numericalMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.addValue(value, weight) return true } override fun report(metric: StringMetrics, value: String, subprojectName: String?, weight: Long?): Boolean { - stringMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.let { metricContainer -> - metricContainer.addValue(value, weight) - } + stringMetrics.getOrPut(MetricDescriptor(metric, subprojectName)) { metric.type.newMetricContainer() }.addValue(value, weight) return true } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt index bfdd703cc41..2301d407236 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset -import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService +import org.jetbrains.kotlin.gradle.utils.addConfigurationMetrics import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheckWhenEvaluated import org.jetbrains.kotlin.statistics.metrics.StringMetrics @@ -33,14 +33,14 @@ open class KotlinJsIrTargetPreset( this.isMpp = this@KotlinJsIrTargetPreset.isMpp project.runProjectConfigurationHealthCheckWhenEvaluated { - val buildStatsService = KotlinBuildStatsService.getInstance() - when { - isBrowserConfigured && isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "both") - isBrowserConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "browser") - isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "nodejs") - !isBrowserConfigured && !isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "none") + project.addConfigurationMetrics { + when { + isBrowserConfigured && isNodejsConfigured -> it.put(StringMetrics.JS_TARGET_MODE, "both") + isBrowserConfigured -> it.put(StringMetrics.JS_TARGET_MODE, "browser") + isNodejsConfigured -> it.put(StringMetrics.JS_TARGET_MODE, "nodejs") + !isBrowserConfigured && !isNodejsConfigured -> it.put(StringMetrics.JS_TARGET_MODE, "none") + } } - Unit } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index e94c3badfe4..0bd319382a8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -8,12 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.metadata import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.artifacts.result.ResolvedArtifactResult -import org.gradle.api.attributes.Category -import org.gradle.api.attributes.Category.CATEGORY_ATTRIBUTE -import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE import org.gradle.api.file.FileCollection import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.metadataTarget @@ -21,9 +17,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.sources.* -import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropMetadataDependencyClasspath -import org.jetbrains.kotlin.gradle.targets.native.internal.includeCommonizedCInteropMetadata import org.jetbrains.kotlin.gradle.targets.native.internal.sharedCommonizerTarget import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.* @@ -60,7 +54,9 @@ class KotlinMetadataTargetConfigurator : super.configureTarget(target) if (target.project.isKotlinGranularMetadataEnabled) { - KotlinBuildStatsService.getInstance()?.report(BooleanMetrics.ENABLED_HMPP, true) + target.project.addConfigurationMetrics { + it.put(BooleanMetrics.ENABLED_HMPP, true) + } target.compilations.withType(KotlinCommonCompilation::class.java).getByName(KotlinCompilation.MAIN_COMPILATION_NAME).run { // Force the default 'main' compilation to produce *.kotlin_metadata regardless of the klib feature flag. @@ -262,7 +258,6 @@ class KotlinMetadataTargetConfigurator : private val ResolvedArtifactResult.isMpp: Boolean get() = variant.attributes.containsMultiplatformAttributes - } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt index 4ae6302a426..66b37ea54b0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KotlinCompileConfig.kt @@ -13,8 +13,6 @@ import org.gradle.api.artifacts.transform.TransformSpec import org.gradle.api.attributes.Attribute import org.gradle.api.provider.Provider import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner -import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService import org.jetbrains.kotlin.gradle.internal.ClassLoadersCachingBuildService @@ -42,6 +40,7 @@ internal open class BaseKotlinCompileConfig : AbstractKotl init { configureTaskProvider { taskProvider -> val useClasspathSnapshot = propertiesProvider.useClasspathSnapshot + val classpathConfiguration = if (useClasspathSnapshot) { val jvmToolchain = taskProvider.flatMap { it.defaultKotlinJavaToolchain } val runKotlinCompilerViaBuildToolsApi = propertiesProvider.runKotlinCompilerViaBuildToolsApi diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/reportUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/reportUtils.kt new file mode 100644 index 00000000000..63cffc5f5cf --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/reportUtils.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2023 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.utils + +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.plugin.statistics.BuildFusService +import org.jetbrains.kotlin.gradle.plugin.statistics.MetricContainer + + +/** + * Invokes build FUS service if the reporting service is initialised and add configuration time metrics. + * + * BuildFusService.reportFusMetrics should be called for execution time metrics + */ +internal fun Project.addConfigurationMetrics(reportAction: (MetricContainer) -> Unit) { + project.gradle.sharedServices.registrations.findByName(BuildFusService.serviceName)?.also { + @Suppress("UNCHECKED_CAST") + (it.service as Provider).also { + it.get().parameters.configurationMetrics.add(project.provider { + val configurationTimeMetrics = MetricContainer() + reportAction(configurationTimeMetrics) + configurationTimeMetrics + }) + } + } +} \ No newline at end of file