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