From 38303aeba78dacb9834483705db78214826e271c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 30 Jan 2019 20:00:09 +0100 Subject: [PATCH] MainMenuCollector contains user data --- .../intellij/openapi/actionSystem/AnAction.java | 12 ++++++++++++ .../src/com/intellij/tools/ToolAction.java | 6 ++++++ .../actionSystem/DefaultActionGroup.java | 16 ++++++++++++++++ .../com/intellij/ide/ReopenProjectAction.java | 7 +++++++ .../ide/actionMacro/ActionMacroManager.java | 6 ++++++ .../actions/persistence/MainMenuCollector.java | 17 ++--------------- .../openapi/wm/impl/ProjectWindowAction.java | 6 ++++++ .../lang/ant/config/actions/AntBuildGroup.java | 7 ++++++- .../lang/ant/config/actions/TargetAction.java | 5 +++++ 9 files changed, 66 insertions(+), 16 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java index fb4786b63f17..706ea63c645b 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/actionSystem/AnAction.java @@ -341,4 +341,16 @@ public abstract class AnAction implements PossiblyDumbAware { void markAsGlobal() { myIsGlobal = true; } + + /** + * Returns default action text. + * This method must be overridden in case template presentation contains user data like Project name, + * Run Configuration name, etc + * + * @return action presentable text without private user data + */ + @Nullable + public String getTemplateText() { + return getTemplatePresentation().getText(); + } } diff --git a/platform/lang-impl/src/com/intellij/tools/ToolAction.java b/platform/lang-impl/src/com/intellij/tools/ToolAction.java index a4555d41df78..419090003e46 100644 --- a/platform/lang-impl/src/com/intellij/tools/ToolAction.java +++ b/platform/lang-impl/src/com/intellij/tools/ToolAction.java @@ -80,4 +80,10 @@ public class ToolAction extends AnAction implements DumbAware { tool.execute(e, new HackyDataContext(context), executionId, processListener); } } + + @Nullable + @Override + public String getTemplateText() { + return "External Tool"; + } } diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java index 81f14417e153..e703d986cb3c 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java @@ -411,4 +411,20 @@ public class DefaultActionGroup extends ActionGroup { super("cannot add an action twice: " + action); } } + + /** + * Creates an action group with specified template text. It is necessary to redefine template text if group contains + * user specific data such as Project name, file name, etc + * @param templateText template text which will be used in statistics + * @return action group + */ + public static DefaultActionGroup createUserDataAwareGroup(String templateText) { + return new DefaultActionGroup() { + @Nullable + @Override + public String getTemplateText() { + return templateText; + } + }; + } } diff --git a/platform/platform-impl/src/com/intellij/ide/ReopenProjectAction.java b/platform/platform-impl/src/com/intellij/ide/ReopenProjectAction.java index 9025df063ea1..b341d921ee47 100644 --- a/platform/platform-impl/src/com/intellij/ide/ReopenProjectAction.java +++ b/platform/platform-impl/src/com/intellij/ide/ReopenProjectAction.java @@ -12,6 +12,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.BitUtil; import com.intellij.util.PathUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.SystemIndependent; import java.awt.event.InputEvent; @@ -80,4 +81,10 @@ public class ReopenProjectAction extends AnAction implements DumbAware { } return myProjectName; } + + @Nullable + @Override + public String getTemplateText() { + return "Reopen Project"; + } } diff --git a/platform/platform-impl/src/com/intellij/ide/actionMacro/ActionMacroManager.java b/platform/platform-impl/src/com/intellij/ide/actionMacro/ActionMacroManager.java index b7ce216d35eb..f38f04dccfa9 100644 --- a/platform/platform-impl/src/com/intellij/ide/actionMacro/ActionMacroManager.java +++ b/platform/platform-impl/src/com/intellij/ide/actionMacro/ActionMacroManager.java @@ -486,6 +486,12 @@ public class ActionMacroManager implements PersistentStateComponent, Di super.update(e); e.getPresentation().setEnabled(!getInstance().isPlaying()); } + + @Nullable + @Override + public String getTemplateText() { + return "Invoke Macro"; + } } private class MyKeyPostpocessor implements IdeEventQueue.EventDispatcher { diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/MainMenuCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/MainMenuCollector.java index 10230930d6a4..d5a41043d24c 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/MainMenuCollector.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/MainMenuCollector.java @@ -78,7 +78,7 @@ public class MainMenuCollector implements PersistentStateComponent groups = Arrays.stream(MenuSelectionManager.defaultManager().getSelectedPath()) .filter(o -> o instanceof ActionMenu) - .map(o -> ((ActionMenu)o).getText()) + .map(o -> ((ActionMenu)o).getAnAction().getTemplateText()) .collect(Collectors.toList()); if (groups.size() > 0) { String text = getActionText(action); @@ -88,25 +88,12 @@ public class MainMenuCollector implements PersistentStateComponent ourBlackList = new HashMap<>(); - - static { - ourBlackList.put("com.intellij.ide.ReopenProjectAction", "Reopen Project"); - ourBlackList.put("com.intellij.openapi.wm.impl.ProjectWindowAction", "Switch Project"); - ourBlackList.put("com.intellij.tools.ToolAction", "External Tool"); - ourBlackList.put("com.intellij.ide.actionMacro.ActionMacroManager$InvokeMacroAction", "Invoke Macro"); - } - private static String getActionText(@NotNull AnAction action) { - String text = ourBlackList.get(action.getClass().getName()); - if (text != null) { - return text; - } final String actionId = ActionManager.getInstance().getId(action); if (StringUtil.isEmpty(actionId)) { return "generated.on.runtime"; } - return action.getTemplatePresentation().getText(); //avoid user data in Action Presentation + return action.getTemplateText(); //avoid user data in Action Presentation } @NotNull diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ProjectWindowAction.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ProjectWindowAction.java index 9fb61ffd5ddc..d4e298624073 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ProjectWindowAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ProjectWindowAction.java @@ -136,4 +136,10 @@ public class ProjectWindowAction extends ToggleAction implements DumbAware { + " previous: " + myPrevious.getTemplatePresentation().getText() + " next: " + myNext.getTemplatePresentation().getText(); } + + @Nullable + @Override + public String getTemplateText() { + return "Switch Project"; + } } \ No newline at end of file diff --git a/plugins/ant/src/com/intellij/lang/ant/config/actions/AntBuildGroup.java b/plugins/ant/src/com/intellij/lang/ant/config/actions/AntBuildGroup.java index e8af1eec8743..a7efefcf084b 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/actions/AntBuildGroup.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/actions/AntBuildGroup.java @@ -45,7 +45,7 @@ public final class AntBuildGroup extends ActionGroup implements DumbAware { final AntConfigurationBase antConfiguration = AntConfigurationBase.getInstance(project); for (final AntBuildFile buildFile : antConfiguration.getBuildFileList()) { final String name = buildFile.getPresentableName(); - DefaultActionGroup subgroup = new DefaultActionGroup(); + DefaultActionGroup subgroup = DefaultActionGroup.createUserDataAwareGroup(getTemplateText()); subgroup.getTemplatePresentation().setText(name, false); subgroup.setPopup(true); fillGroup(buildFile, subgroup, antConfiguration); @@ -106,4 +106,9 @@ public final class AntBuildGroup extends ActionGroup implements DumbAware { } return action; } + + @Override + public String getTemplateText() { + return "Ant Build Group"; + } } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/actions/TargetAction.java b/plugins/ant/src/com/intellij/lang/ant/config/actions/TargetAction.java index 057166d2b688..9c65aa0b002a 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/actions/TargetAction.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/actions/TargetAction.java @@ -66,4 +66,9 @@ public final class TargetAction extends DumbAwareAction { } } } + + @Override + public String getTemplateText() { + return "Ant Target"; + } } \ No newline at end of file