String (@NotNull final AnAction rootAction, @NotNull final Map<String, PluginId> actionToPluginId) { final Deque<AnAction> actions = new ArrayDeque<>(); actions.add(rootAction); while (!actions.isEmpty()) { final AnAction action = actions.remove(); final String module = getModuleByClass(action.getClass()); if (!ROOT_ACTION_MODULE.equals(module)) { return module; } if (action instanceof ActionGroup) { Collections.addAll(actions, ((ActionGroup)action).getChildren(null)); } } final ActionManager actionManager = ActionManager.getInstance(); final PluginId id = actionToPluginId.get(actionManager.getId(rootAction)); if (id != null) { final IdeaPluginDescriptor plugin = PluginManagerCore.getPlugin(id); if (plugin != null && !plugin.getName().equals(PluginManagerCore.SPECIAL_IDEA_PLUGIN_ID.getIdString())) { return PathUtil.getFileName(plugin.getPluginPath().toString()); } } return ROOT_ACTION_MODULE; }