Similar usages: statistics for actions and load-more events

GitOrigin-RevId: 1bbb19e4078f6605c183670a2c2cc817f9129561
This commit is contained in:
Andrey Sokolov
2022-08-24 14:48:41 +00:00
committed by intellij-monorepo-bot
parent a9e7ed216e
commit 09a53cbb15
5 changed files with 71 additions and 3 deletions
@@ -1121,6 +1121,7 @@
<statistics.counterUsagesCollector implementationClass="com.intellij.ide.actions.runAnything.RunAnythingUsageCollector"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.codeInsight.template.impl.SurroundWithLogger"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.find.FindUsagesCollector"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.usages.similarity.statistics.SimilarUsagesCollector"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.ide.actions.CreateDirectoryUsageCollector"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.refactoring.ui.RefactoringDialogUsageCollector"/>
<statistics.counterUsagesCollector implementationClass="com.intellij.ide.projectView.impl.ProjectViewImpl$ProjectViewPaneChangesCollector"/>
@@ -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<SimilarUsage> 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,
@@ -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;
});
@@ -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()),
@@ -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)
}
}
}