diff --git a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt
index 711530039c1f..62f07bc77897 100644
--- a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt
+++ b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt
@@ -52,6 +52,7 @@ class CollectionVisualizerEvaluator(private val visualizer: CollectionVisualizer
disposeOnResume(evaluationContext, scope)
closeOnEsc()
show()
+ CollectionVisualizerStatisticsCollector.reportShown(project)
}
}
}
@@ -64,14 +65,21 @@ class CollectionVisualizerEvaluator(private val visualizer: CollectionVisualizer
evaluationContext.debugProcess.addDebugProcessListener(object : DebugProcessListener {
override fun resumed(suspendContext: SuspendContext?) {
if (affectedByResume(suspendContext)) {
- close()
- scope.cancel()
+ CollectionVisualizerStatisticsCollector.reportClosed(evaluationContext.project, VisualizerClosedCause.RESUME)
+ doClose()
}
}
override fun processDetached(process: DebugProcess, closedByUser: Boolean) {
+ val cause = if (closedByUser) VisualizerClosedCause.DETACH_MANUAL else VisualizerClosedCause.DETACH_AUTO
+ CollectionVisualizerStatisticsCollector.reportClosed(evaluationContext.project, cause)
+ doClose()
+ }
+
+ private fun doClose() {
close()
scope.cancel()
+ evaluationContext.debugProcess.removeDebugProcessListener(this)
}
// maximum conservatism -- better close more popups than make them leak
diff --git a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt
new file mode 100644
index 000000000000..8b18002a0b21
--- /dev/null
+++ b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt
@@ -0,0 +1,25 @@
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.debugger.collections.visualizer
+
+import com.intellij.internal.statistic.eventLog.EventLogGroup
+import com.intellij.internal.statistic.eventLog.events.EventFields
+import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
+import com.intellij.openapi.project.Project
+
+internal object CollectionVisualizerStatisticsCollector : CounterUsagesCollector() {
+
+ private val GROUP = EventLogGroup("debugger.collection.visualizer", 1)
+ private val closedEvent = GROUP.registerEvent("closed", EventFields.Enum("cause", VisualizerClosedCause::class.java))
+ private val shownEvent = GROUP.registerEvent("shown")
+
+ fun reportShown(project: Project) = shownEvent.log(project)
+ fun reportClosed(project: Project, cause: VisualizerClosedCause) = closedEvent.log(project, cause)
+
+ override fun getGroup(): EventLogGroup = GROUP
+}
+
+enum class VisualizerClosedCause {
+ RESUME,
+ DETACH_AUTO,
+ DETACH_MANUAL,
+}
\ No newline at end of file
diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml
index 0970a369a9d1..fff73139b0a0 100644
--- a/java/java-impl/src/META-INF/JavaPlugin.xml
+++ b/java/java-impl/src/META-INF/JavaPlugin.xml
@@ -575,6 +575,7 @@
+