diff: record policy usage statistics

This commit is contained in:
Aleksey Pivovarov
2015-11-03 17:55:13 +03:00
parent 56ce1fa306
commit f959e56348
5 changed files with 80 additions and 0 deletions
@@ -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);
@@ -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<UsageDescriptor> getUsages() throws CollectUsagesException {
Set<UsageDescriptor> 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<UsageDescriptor> 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<String> 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));
}
}
@@ -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;
@@ -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<TextDiff
public void setHighlightPolicy(@NotNull HighlightPolicy value) {
PLACE_SETTINGS.HIGHLIGHT_POLICY = value;
UsageTrigger.trigger("diff.TextDiffSettings.HighlightPolicy." + value.name());
}
@NotNull
@@ -103,6 +105,7 @@ public class TextDiffSettingsHolder implements PersistentStateComponent<TextDiff
public void setIgnorePolicy(@NotNull IgnorePolicy policy) {
PLACE_SETTINGS.IGNORE_POLICY = policy;
UsageTrigger.trigger("diff.TextDiffSettings.IgnorePolicy." + policy.name());
}
// Editor settings
@@ -106,6 +106,7 @@
<configurable id="diff.external" displayName="External Diff Tools"
instance="com.intellij.diff.settings.ExternalDiffSettingsConfigurable"/>
</applicationConfigurable>
<statistics.usagesCollector implementation="com.intellij.diff.statistics.DiffUsagesCollector"/>
<applicationService serviceInterface="com.intellij.ui.SystemNotifications"
serviceImplementation="com.intellij.ui.SystemNotificationsImpl"/>