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 72ce0ebbddb..f0913706b35 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 @@ -38,6 +38,14 @@ interface KotlinBuildStatsMXBean { fun reportNumber(name: String, value: Long, subprojectName: String?, weight: Long?): Boolean fun reportString(name: String, value: String, subprojectName: String?, weight: Long?): Boolean + + //support Idea up to 2023.1 version, before KT-57371 fix + + fun reportBoolean(name: String, value: Boolean, subprojectName: String?): Boolean + + fun reportNumber(name: String, value: Long, subprojectName: String?): Boolean + + fun reportString(name: String, value: String, subprojectName: String?): Boolean } @@ -165,7 +173,7 @@ internal abstract class KotlinBuildStatsService internal constructor() : BuildAd internal class JMXKotlinBuildStatsService(private val mbs: MBeanServer, private val beanName: ObjectName) : KotlinBuildStatsService() { - private fun callJmx(method: String, type: String, metricName: String, value: Any, subprojectName: String?, weight: Long?): Any? { + private fun callJmx_v2(method: String, type: String, metricName: String, value: Any, subprojectName: String?, weight: Long): Any? { return mbs.invoke( beanName, method, @@ -174,6 +182,24 @@ internal class JMXKotlinBuildStatsService(private val mbs: MBeanServer, private ) } + private fun callJmx_v1(method: String, type: String, metricName: String, value: Any, subprojectName: String?): Any? { + return mbs.invoke( + beanName, + method, + arrayOf(metricName, value, subprojectName), + arrayOf("java.lang.String", type, "java.lang.String") + ) + } + + //Temporary solution before KT-57371 + private fun callJmx(method: String, type: String, metricName: String, value: Any, subprojectName: String?, weight: Long?): Any? { + return if (weight == null) { + callJmx_v1(method, type, metricName, value, subprojectName) + } else { + callJmx_v2(method, type, metricName, value, subprojectName, weight) + } + } + override fun report(metric: BooleanMetrics, value: Boolean, subprojectName: String?, weight: Long?) = runSafe("report metric ${metric.name}") { callJmx("reportBoolean", "boolean", metric.name, value, subprojectName, weight) @@ -243,4 +269,16 @@ internal class DefaultKotlinBuildStatsService internal constructor( override fun reportString(name: String, value: String, subprojectName: String?, weight: Long?): Boolean = report(StringMetrics.valueOf(name), value, subprojectName, weight) + + override fun reportBoolean(name: String, value: Boolean, subprojectName: String?): Boolean = + report(BooleanMetrics.valueOf(name), value, subprojectName, null) + + + override fun reportNumber(name: String, value: Long, subprojectName: String?): Boolean = + report(NumericalMetrics.valueOf(name), value, subprojectName, null) + + + override fun reportString(name: String, value: String, subprojectName: String?): Boolean = + report(StringMetrics.valueOf(name), value, subprojectName, null) + } diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildStatServiceTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildStatServiceTest.kt index c3bd784c967..d7f788731c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildStatServiceTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildStatServiceTest.kt @@ -50,6 +50,21 @@ class BuildStatServiceTest { return true } + override fun reportBoolean(name: String, value: Boolean, subprojectName: String?): Boolean { + callsCount.incrementAndGet() + return true + } + + override fun reportNumber(name: String, value: Long, subprojectName: String?): Boolean { + callsCount.incrementAndGet() + return true + } + + override fun reportString(name: String, value: String, subprojectName: String?): Boolean { + callsCount.incrementAndGet() + return true + } + } val beanName = ObjectName(KotlinBuildStatsService.JMX_BEAN_NAME)