diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml
index b579f04f7186..98b15d1ab4c0 100644
--- a/platform/platform-resources/src/META-INF/LangExtensions.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensions.xml
@@ -1121,6 +1121,7 @@
+
diff --git a/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/MostCommonUsagePatternsComponent.java b/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/MostCommonUsagePatternsComponent.java
index 22d882b1599e..c8bda83289fc 100644
--- a/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/MostCommonUsagePatternsComponent.java
+++ b/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/MostCommonUsagePatternsComponent.java
@@ -29,6 +29,7 @@ import com.intellij.usages.UsageView;
import com.intellij.usages.impl.UsageViewImpl;
import com.intellij.usages.similarity.clustering.ClusteringSearchSession;
import com.intellij.usages.similarity.clustering.UsageCluster;
+import com.intellij.usages.similarity.statistics.SimilarUsagesCollector;
import com.intellij.usages.similarity.usageAdapter.SimilarUsage;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBUI;
@@ -59,6 +60,7 @@ public class MostCommonUsagePatternsComponent extends SimpleToolWindowPanel impl
public MostCommonUsagePatternsComponent(@NotNull UsageViewImpl usageView, @NotNull ClusteringSearchSession session) {
super(true);
+ SimilarUsagesCollector.logMoreSimilarUsagePatternsShow(session.hashCode());
mySession = session;
myUsageView = usageView;
myProject = usageView.getProject();
@@ -72,6 +74,8 @@ public class MostCommonUsagePatternsComponent extends SimpleToolWindowPanel impl
new RefreshAction(IdeBundle.messagePointer("action.refresh"), IdeBundle.messagePointer("action.refresh"), AllIcons.Actions.Refresh) {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
+ SimilarUsagesCollector.logMostCommonUsagePatternsRefreshClicked(mySession.hashCode());
+ mySortedClusters.set(null);
myMainPanel.removeAll();
myMainPanel.revalidate();
mySelectedUsages = myUsageView.getSelectedUsages();
@@ -106,6 +110,7 @@ public class MostCommonUsagePatternsComponent extends SimpleToolWindowPanel impl
lazyLoadingScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
BoundedRangeModelThresholdListener.install(lazyLoadingScrollPane.getVerticalScrollBar(), () -> {
if (!mySortedClusters.isNull()) {
+ SimilarUsagesCollector.logMoreClustersLoaded(mySession.hashCode());
mySortedClusters.get().stream().skip(myAlreadyRenderedSnippets).limit(CLUSTER_LIMIT).forEach(cluster -> {
renderClusterDescription(cluster.getUsages());
});
@@ -128,7 +133,8 @@ public class MostCommonUsagePatternsComponent extends SimpleToolWindowPanel impl
private @NotNull ActionLink createOpenSimilarUsagesActionLink(@NotNull UsageInfo info, @NotNull Set usagesToRender) {
final ActionLink actionLink =
new ActionLink(UsageViewBundle.message("similar.usages.show.0.similar.usages.title", usagesToRender.size() - 1), e -> {
- final SimilarUsagesComponent similarComponent = new SimilarUsagesComponent(info, this);
+ SimilarUsagesCollector.logShowSimilarUsagesLinkClicked(mySession.hashCode());
+ final SimilarUsagesComponent similarComponent = new SimilarUsagesComponent(mySession, info, this);
removeAll();
setToolbar(new SimilarUsagesToolbar(similarComponent, UsageViewBundle.message("0.similar.usages", usagesToRender.size() - 1),
myRefreshAction,
diff --git a/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/SimilarUsagesComponent.java b/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/SimilarUsagesComponent.java
index 41f47659ed07..fb8640d4893c 100644
--- a/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/SimilarUsagesComponent.java
+++ b/platform/usageView-impl/src/com/intellij/find/findUsages/similarity/SimilarUsagesComponent.java
@@ -9,6 +9,8 @@ import com.intellij.ui.components.panels.VerticalLayout;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewBundle;
import com.intellij.usages.UsageInfo2UsageAdapter;
+import com.intellij.usages.similarity.clustering.ClusteringSearchSession;
+import com.intellij.usages.similarity.statistics.SimilarUsagesCollector;
import com.intellij.usages.similarity.usageAdapter.SimilarUsage;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
@@ -27,8 +29,11 @@ public class SimilarUsagesComponent extends JPanel implements Disposable {
private int alreadyShown = 0;
private final @NotNull UsageInfo myOriginalUsage;
- public SimilarUsagesComponent(@NotNull UsageInfo originalUsage, @NotNull Disposable parent) {
+ private final @NotNull ClusteringSearchSession mySession;
+
+ public SimilarUsagesComponent(@NotNull ClusteringSearchSession session, @NotNull UsageInfo originalUsage, @NotNull Disposable parent) {
myOriginalUsage = originalUsage;
+ mySession = session;
setLayout(new VerticalLayout(0));
setBackground(UIUtil.getTextFieldBackground());
Disposer.register(parent, this);
@@ -85,6 +90,7 @@ public class SimilarUsagesComponent extends JPanel implements Disposable {
renderOriginalUsage();
renderSimilarUsages(usagesToRender);
BoundedRangeModelThresholdListener.install(similarUsagesScrollPane.getVerticalScrollBar(), () -> {
+ SimilarUsagesCollector.logMoreUsagesLoaded(mySession.hashCode());
renderSimilarUsages(usagesToRender);
return Unit.INSTANCE;
});
diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/UsagePreviewToolbarWithSimilarUsagesLink.java b/platform/usageView-impl/src/com/intellij/usages/impl/UsagePreviewToolbarWithSimilarUsagesLink.java
index 5ae9226a2e7a..9e1af72c0268 100644
--- a/platform/usageView-impl/src/com/intellij/usages/impl/UsagePreviewToolbarWithSimilarUsagesLink.java
+++ b/platform/usageView-impl/src/com/intellij/usages/impl/UsagePreviewToolbarWithSimilarUsagesLink.java
@@ -11,7 +11,9 @@ import com.intellij.ui.components.AnActionLink;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewBundle;
import com.intellij.usages.UsageView;
+import com.intellij.usages.similarity.clustering.ClusteringSearchSession;
import com.intellij.usages.similarity.clustering.UsageCluster;
+import com.intellij.usages.similarity.statistics.SimilarUsagesCollector;
import com.intellij.usages.similarity.usageAdapter.SimilarUsage;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
@@ -78,7 +80,10 @@ public class UsagePreviewToolbarWithSimilarUsagesLink extends JPanel {
previewPanel.releaseEditor();
UsageInfo firstSelectedInfo = ContainerUtil.getFirstItem(infos);
assert firstSelectedInfo != null;
- final SimilarUsagesComponent similarComponent = new SimilarUsagesComponent(firstSelectedInfo, previewPanel);
+ ClusteringSearchSession session = ContainerUtil.getFirstItem(usages).getClusteringSession();
+ SimilarUsagesCollector.logLinkToSimilarUsagesLinkFromUsagePreviewClicked(session.hashCode());
+ final SimilarUsagesComponent similarComponent =
+ new SimilarUsagesComponent(session, firstSelectedInfo, previewPanel);
previewPanel.add(
new SimilarUsagesToolbar(similarComponent, UsageViewBundle.message("0.similar.usages", usages.size() - 1), null,
new AnActionLink(UsageViewBundle.message("0.similar.usages.back.to.usage.preview", UIUtil.leftArrow()),
diff --git a/platform/usageView/src/com/intellij/usages/similarity/statistics/SimilarUsagesCollector.kt b/platform/usageView/src/com/intellij/usages/similarity/statistics/SimilarUsagesCollector.kt
new file mode 100644
index 000000000000..900b16e66143
--- /dev/null
+++ b/platform/usageView/src/com/intellij/usages/similarity/statistics/SimilarUsagesCollector.kt
@@ -0,0 +1,50 @@
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.usages.similarity.statistics
+
+import com.intellij.internal.statistic.eventLog.EventLogGroup
+import com.intellij.internal.statistic.eventLog.events.EventFields
+import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
+
+class SimilarUsagesCollector : CounterUsagesCollector() {
+ override fun getGroup(): EventLogGroup = GROUP
+
+ companion object {
+ private val GROUP = EventLogGroup("similar.usages", 1)
+ private val SESSION_ID = EventFields.Int("id")
+ private val MOST_COMMON_USAGE_PATTERNS_SHOWN = GROUP.registerEvent("most.common.usages.shown", SESSION_ID)
+ private val MOST_COMMON_USAGE_PATTERNS_REFRESH_CLICKED = GROUP.registerEvent("most.common.usage.patterns.refresh.clicked", SESSION_ID)
+ private val LINK_TO_SIMILAR_USAGES_FROM_USAGE_PREVIEW_CLICKED = GROUP.registerEvent("link.to.similar.usage.clicked", SESSION_ID)
+ private val SHOW_SIMILAR_USAGES_LINK_CLICKED = GROUP.registerEvent("show.similar.usages.link.clicked", SESSION_ID)
+ private val MORE_CLUSTERS_LOADED = GROUP.registerEvent("more.clusters.loaded", SESSION_ID)
+ private val MORE_USAGES_LOADED = GROUP.registerEvent("more.usages.loaded", SESSION_ID)
+
+ @JvmStatic
+ fun logMoreSimilarUsagePatternsShow(sessionId: Int) {
+ MOST_COMMON_USAGE_PATTERNS_SHOWN.log(sessionId)
+ }
+
+ @JvmStatic
+ fun logMostCommonUsagePatternsRefreshClicked(sessionId: Int) {
+ MOST_COMMON_USAGE_PATTERNS_REFRESH_CLICKED.log(sessionId)
+ }
+ @JvmStatic
+ fun logLinkToSimilarUsagesLinkFromUsagePreviewClicked(sessionId: Int) {
+ LINK_TO_SIMILAR_USAGES_FROM_USAGE_PREVIEW_CLICKED.log(sessionId)
+ }
+
+ @JvmStatic
+ fun logShowSimilarUsagesLinkClicked(sessionId: Int) {
+ SHOW_SIMILAR_USAGES_LINK_CLICKED.log(sessionId)
+ }
+
+ @JvmStatic
+ fun logMoreClustersLoaded(sessionId: Int) {
+ MORE_CLUSTERS_LOADED.log(sessionId)
+ }
+
+ @JvmStatic
+ fun logMoreUsagesLoaded(sessionId: Int) {
+ MORE_USAGES_LOADED.log(sessionId)
+ }
+ }
+}
\ No newline at end of file