From 2e753f2ecbe64008997dd5b4eb7e85ad584141e0 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Tue, 27 May 2025 13:25:18 -0700 Subject: [PATCH] fix(amazonq): fix warnings when metrics fields are null --- .../amazonq/lsp/AmazonQLanguageClientImpl.kt | 4 +-- .../lsp/AmazonQLanguageClientImplTest.kt | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index b56b4e1ba07..7b33a57eb86 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -77,7 +77,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC val name = telemetryMap["name"] as? String ?: return @Suppress("UNCHECKED_CAST") - val data = telemetryMap["data"] as? Map ?: return + val data = telemetryMap["data"] as? Map ?: return TelemetryService.getInstance().record(project) { datum(name) { @@ -90,7 +90,7 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC } data.forEach { (key, value) -> - metadata(key, value.toString()) + metadata(key, value?.toString() ?: "null") } } } diff --git a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImplTest.kt b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImplTest.kt index c390120c111..232f4bdb6cb 100644 --- a/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImplTest.kt +++ b/plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImplTest.kt @@ -81,6 +81,36 @@ class AmazonQLanguageClientImplTest { ) } + @Test + fun `telemetryEvent handles null`() { + val telemetryService = mockk(relaxed = true) + mockkObject(TelemetryService) + every { TelemetryService.getInstance() } returns telemetryService + + val builderCaptor = slot Unit>() + every { telemetryService.record(project, capture(builderCaptor)) } returns Unit + + val event = mapOf( + "name" to "test_event", + "data" to mapOf( + "key1" to null, + ) + ) + + sut.telemetryEvent(event) + + val builder = DefaultMetricEvent.builder() + builderCaptor.captured.invoke(builder) + + val metricEvent = builder.build() + val datum = metricEvent.data.first() + + assertThat(datum.name).isEqualTo("test_event") + assertThat(datum.metadata).contains( + entry("key1", "null"), + ) + } + @Test fun `telemetryEvent handles event with result field`() { val telemetryService = mockk(relaxed = true)