From b24d4bf84fa1f69353f4cb4631ad84e762384689 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 15 Dec 2017 18:57:27 +0300 Subject: [PATCH] IDEA-180874 Set click counters for New, Open and Import Project actions ability to track actions not registered in xml --- .../vcs/checkout/NewProjectFromVCSGroup.java | 6 +++++- .../actions/ActionIdProvider.java | 8 ++++++++ .../actionSystem/impl/ActionManagerImpl.java | 4 ++++ .../openapi/vcs/checkout/CheckoutAction.java | 12 ++++++++++-- .../openapi/vcs/checkout/CheckoutActionGroup.java | 13 ++++++++++++- .../wm/impl/welcomeScreen/GetFromVcsAction.java | 10 ++-------- 6 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/internal/statistic/customUsageCollectors/actions/ActionIdProvider.java diff --git a/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java index 2c8d75704317..d4b5ebee7b26 100644 --- a/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java +++ b/java/idea-ui/src/com/intellij/openapi/vcs/checkout/NewProjectFromVCSGroup.java @@ -28,10 +28,14 @@ import java.io.File; public class NewProjectFromVCSGroup extends CheckoutActionGroup { + public NewProjectFromVCSGroup() { + super("NewProjectFromVCS"); + } + @NotNull @Override protected AnAction createAction(CheckoutProvider provider) { - return new CheckoutAction(provider) { + return new CheckoutAction(provider, myIdPrefix) { @Override protected CheckoutProvider.Listener getListener(Project project) { return new CheckoutProvider.Listener() { diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/customUsageCollectors/actions/ActionIdProvider.java b/platform/platform-impl/src/com/intellij/internal/statistic/customUsageCollectors/actions/ActionIdProvider.java new file mode 100644 index 000000000000..03164ad55ad7 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/internal/statistic/customUsageCollectors/actions/ActionIdProvider.java @@ -0,0 +1,8 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + */ +package com.intellij.internal.statistic.customUsageCollectors.actions; + +public interface ActionIdProvider { + String getId(); +} diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java index ac0c4db32e4c..f712565a1f81 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java @@ -24,6 +24,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.idea.IdeaLogger; +import com.intellij.internal.statistic.customUsageCollectors.actions.ActionIdProvider; import com.intellij.internal.statistic.customUsageCollectors.actions.ActionsCollector; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; @@ -1170,6 +1171,9 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab if (action != null) { myPrevPerformedActionId = myLastPreformedActionId; myLastPreformedActionId = getId(action); + if (myLastPreformedActionId == null && action instanceof ActionIdProvider) { + myLastPreformedActionId = ((ActionIdProvider)action).getId(); + } //noinspection AssignmentToStaticFieldFromInstanceMethod IdeaLogger.ourLastActionId = myLastPreformedActionId; ActionsCollector.getInstance().record(myLastPreformedActionId); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java index 2408c4293d5e..29e6b7db1cdd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutAction.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vcs.checkout; +import com.intellij.internal.statistic.customUsageCollectors.actions.ActionIdProvider; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; @@ -22,12 +23,14 @@ import com.intellij.openapi.project.*; import com.intellij.openapi.vcs.CheckoutProvider; import com.intellij.openapi.vcs.ProjectLevelVcsManager; -public class CheckoutAction extends AnAction implements DumbAware { +public class CheckoutAction extends AnAction implements DumbAware, ActionIdProvider { private final CheckoutProvider myProvider; + private final String myIdPrefix; - public CheckoutAction(final CheckoutProvider provider) { + public CheckoutAction(CheckoutProvider provider, String idPrefix) { super(provider.getVcsName()); myProvider = provider; + myIdPrefix = idPrefix; } public void actionPerformed(final AnActionEvent e) { @@ -39,4 +42,9 @@ public class CheckoutAction extends AnAction implements DumbAware { protected CheckoutProvider.Listener getListener(Project project) { return ProjectLevelVcsManager.getInstance(project).getCompositeCheckoutListener(); } + + @Override + public String getId() { + return myIdPrefix + "." + myProvider.getVcsName().replaceAll("_", ""); + } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java index aef225849eec..35ac6012dca9 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/checkout/CheckoutActionGroup.java @@ -24,6 +24,17 @@ import org.jetbrains.annotations.NotNull; import java.util.Arrays; public class CheckoutActionGroup extends ComputableActionGroup.Simple { + protected final String myIdPrefix; + + @SuppressWarnings("unused") + public CheckoutActionGroup() { + this("Vcs.Checkout"); + } + + public CheckoutActionGroup(String idPrefix) { + myIdPrefix = idPrefix; + } + @NotNull @Override protected AnAction[] computeChildren(@NotNull ActionManager manager) { @@ -43,6 +54,6 @@ public class CheckoutActionGroup extends ComputableActionGroup.Simple { @NotNull protected AnAction createAction(CheckoutProvider provider) { - return new CheckoutAction(provider); + return new CheckoutAction(provider, myIdPrefix); } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java index 8bbed7ee6f52..dfb15ae79d53 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java @@ -19,19 +19,13 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.vcs.CheckoutProvider; -import com.intellij.openapi.vcs.checkout.CheckoutAction; +import com.intellij.openapi.vcs.checkout.CheckoutActionGroup; import com.intellij.ui.UIBundle; -import java.util.Arrays; - public class GetFromVcsAction extends WelcomePopupAction{ protected void fillActions(DefaultActionGroup group) { - final CheckoutProvider[] providers = Extensions.getExtensions(CheckoutProvider.EXTENSION_POINT_NAME); - Arrays.sort(providers, new CheckoutProvider.CheckoutProviderComparator()); - for (CheckoutProvider provider : providers) { - group.add(new CheckoutAction(provider)); - } + group.addAll(new CheckoutActionGroup("WelcomeScreen.GetFromVcs")); } protected String getCaption() {