void (@NotNull Set<String> nonUniqueClasses) { ActionManagerImpl actionManager = (ActionManagerImpl)ActionManager.getInstance(); int[] actionUpdateThreadCounts = new int[ActionUpdateThread.values().length]; List<String> oldEdtActionNames = new ArrayList<>(); for (String id : actionManager.getActionIds()) { AnAction action = actionManager.getAction(id); if (action == null) continue; if (action.getClass() == DefaultActionGroup.class) continue; ActionUpdateThread updateThread = action.getActionUpdateThread(); actionUpdateThreadCounts[updateThread.ordinal()]++; if (updateThread == ActionUpdateThread.OLD_EDT) { String className = action.getClass().getName(); String actionIdIfNeeded = nonUniqueClasses.contains(className) ? " (" + id + ")" : ""; String actionName = className + actionIdIfNeeded; oldEdtActionNames.add(actionName); } } List<String> oldEdtExtensions = new ArrayList<>(); ExtensionsAreaImpl extensionArea = (ExtensionsAreaImpl)ApplicationManager.getApplication().getExtensionArea(); //noinspection TestOnlyProblems extensionArea.processExtensionPoints(ep -> { try { if (ActionUpdateThreadAware.class.isAssignableFrom(ep.getExtensionClass())) { //noinspection unchecked List<ActionUpdateThreadAware> extensions = (List<ActionUpdateThreadAware>)ep.getExtensionList(); for (ActionUpdateThreadAware extension : extensions) { ActionUpdateThread updateThread = extension.getActionUpdateThread(); if (updateThread == ActionUpdateThread.OLD_EDT) { oldEdtExtensions.add(extension.getClass().getName()); } } } } catch (Throwable e) { LOG.warn(e); } return Unit.INSTANCE; }); StringBuilder sb = new StringBuilder(); sb.append("---- action-update-thread stats ----\n"); sb.append(StringUtil.join(ActionUpdateThread.values(), t -> actionUpdateThreadCounts[t.ordinal()] + ":" + t.name(), ", ")); if (!oldEdtActionNames.isEmpty()) { sb.append("... see the list of registered OLD_EDT actions below:"); oldEdtActionNames.sort(String::compareTo); for (String name : oldEdtActionNames) { sb.append("\n").append(name); } sb.append("\n"); } if (!oldEdtExtensions.isEmpty()) { sb.append("\n... and ").append(oldEdtExtensions.size()).append(" OLD_EDT extensions:"); oldEdtExtensions.sort(String::compareTo); for (String name : oldEdtExtensions) { sb.append("\n").append(name); } sb.append("\n"); } LOG.info(sb.toString()); }