From f959e56348d0e5f6e1b89ed9b6cf97c54051bb7f Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 27 Oct 2015 20:07:11 +0300 Subject: [PATCH] diff: record policy usage statistics --- .../diff/impl/DiffRequestProcessor.java | 3 + .../diff/statistics/DiffUsagesCollector.java | 70 +++++++++++++++++++ .../diff/tools/dir/DirDiffViewer.java | 3 + .../util/base/TextDiffSettingsHolder.java | 3 + .../src/META-INF/PlatformExtensions.xml | 1 + 5 files changed, 80 insertions(+) create mode 100644 platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.java diff --git a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java index 282d5d9b6c6a..303ac5338ca0 100644 --- a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java +++ b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java @@ -34,6 +34,8 @@ import com.intellij.diff.util.DiffUtil; import com.intellij.diff.util.LineRange; import com.intellij.ide.DataManager; import com.intellij.ide.impl.DataManagerImpl; +import com.intellij.internal.statistic.UsageTrigger; +import com.intellij.internal.statistic.beans.ConvertUsagesUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ComboBoxAction; @@ -585,6 +587,7 @@ public abstract class DiffRequestProcessor implements Disposable { public void actionPerformed(@NotNull AnActionEvent e) { if (myState.getActiveTool() == myDiffTool) return; + UsageTrigger.trigger("diff.DiffSettings.Tool." + ConvertUsagesUtil.ensureProperKey(myDiffTool.getName())); moveToolOnTop(myDiffTool); updateRequest(true); diff --git a/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.java b/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.java new file mode 100644 index 000000000000..b8216b3a4014 --- /dev/null +++ b/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.java @@ -0,0 +1,70 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.diff.statistics; + +import com.intellij.diff.impl.DiffSettingsHolder; +import com.intellij.diff.tools.fragmented.UnifiedDiffTool; +import com.intellij.diff.tools.simple.SimpleDiffTool; +import com.intellij.diff.tools.util.base.TextDiffSettingsHolder; +import com.intellij.diff.util.DiffPlaces; +import com.intellij.internal.statistic.CollectUsagesException; +import com.intellij.internal.statistic.UsagesCollector; +import com.intellij.internal.statistic.beans.GroupDescriptor; +import com.intellij.internal.statistic.beans.UsageDescriptor; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Set; + +public class DiffUsagesCollector extends UsagesCollector { + public static final GroupDescriptor ID = GroupDescriptor.create("Diff"); + + @NotNull + public GroupDescriptor getGroupId() { + return ID; + } + + @NotNull + @Override + public Set getUsages() throws CollectUsagesException { + Set usages = ContainerUtil.newHashSet(); + + processUsages(DiffPlaces.DEFAULT, usages); + processUsages(DiffPlaces.CHANGES_VIEW, usages); + processUsages(DiffPlaces.COMMIT_DIALOG, usages); + + DiffSettingsHolder.DiffSettings diffSettings = DiffSettingsHolder.getInstance().getSettings(null); + usages.add(new UsageDescriptor("diff.DiffSettings.Default.IterateNextFile", diffSettings.isGoToNextFileOnNextDifference() ? 1 : 0)); + + return usages; + } + + private static void processUsages(@NotNull String place, @NotNull Set usages) { + DiffSettingsHolder.DiffSettings diffSettings = DiffSettingsHolder.getInstance().getSettings(place); + TextDiffSettingsHolder.TextDiffSettings textSettings = TextDiffSettingsHolder.getInstance().getSettings(place); + + usages.add(new UsageDescriptor("diff.TextDiffSettings.Default.IgnorePolicy." + textSettings.getIgnorePolicy().name(), 1)); + usages.add(new UsageDescriptor("diff.TextDiffSettings.Default.HighlightPolicy." + textSettings.getHighlightPolicy().name(), 1)); + usages.add(new UsageDescriptor("diff.TextDiffSettings.Default.ExpandByDefault", textSettings.isExpandByDefault() ? 1 : 0)); + + List toolOrder = diffSettings.getDiffToolsOrder(); + int defaultToolIndex = ContainerUtil.indexOf(toolOrder, SimpleDiffTool.class.getCanonicalName()); + int unifiedToolIndex = ContainerUtil.indexOf(toolOrder, UnifiedDiffTool.class.getCanonicalName()); + boolean isUnifiedDefault = unifiedToolIndex != -1 && unifiedToolIndex < defaultToolIndex; + usages.add(new UsageDescriptor("diff.DiffSettings.Default.isUnifiedTool", isUnifiedDefault ? 1 : 0)); + } +} diff --git a/platform/diff-impl/src/com/intellij/diff/tools/dir/DirDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/dir/DirDiffViewer.java index da228f70dbc8..f18cf8a0bfb1 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/dir/DirDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/dir/DirDiffViewer.java @@ -29,6 +29,7 @@ import com.intellij.ide.diff.DirDiffSettings; import com.intellij.ide.diff.JarFileDiffElement; import com.intellij.ide.diff.VirtualFileDiffElement; import com.intellij.ide.highlighter.ArchiveFileType; +import com.intellij.internal.statistic.UsageTrigger; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.DataProvider; @@ -59,6 +60,8 @@ class DirDiffViewer implements FrameDiffTool.DiffViewer { @NotNull private final JPanel myPanel; public DirDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) { + UsageTrigger.trigger("diff.DirDiffViewer"); + myContext = context; myRequest = request; diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/base/TextDiffSettingsHolder.java b/platform/diff-impl/src/com/intellij/diff/tools/util/base/TextDiffSettingsHolder.java index 6a2443a11d74..0c0d7a618208 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/base/TextDiffSettingsHolder.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/base/TextDiffSettingsHolder.java @@ -17,6 +17,7 @@ package com.intellij.diff.tools.util.base; import com.intellij.diff.util.DiffPlaces; import com.intellij.diff.util.DiffUtil; +import com.intellij.internal.statistic.UsageTrigger; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; @@ -94,6 +95,7 @@ public class TextDiffSettingsHolder implements PersistentStateComponent +