List<PropertyBean> (@NotNull AnAction action) { List<PropertyBean> result = new ArrayList<>(); Class<? extends AnAction> clazz = action.getClass(); boolean isGroup = action instanceof ActionGroup; String prefix = isGroup ? "Group" : "Action"; result.add(new PropertyBean(prefix + " ID", getActionId(action), true)); if (clazz != DefaultActionGroup.class) { result.add(new PropertyBean(prefix + " Class", clazz.getName(), true)); } final ClassLoader classLoader = clazz.getClassLoader(); if (classLoader instanceof PluginAwareClassLoader) { result.add(new PropertyBean(prefix + " Plugin ID", ((PluginAwareClassLoader)classLoader).getPluginId().getIdString(), true)); } int depth = 1; Object object = action; while (object instanceof ActionWithDelegate<?>) { String suffix = " (" + depth + ")"; Object delegate = ((ActionWithDelegate<?>)object).getDelegate(); if (delegate instanceof AnAction) { result.add(new PropertyBean(prefix + " Delegate Class" + suffix, delegate.getClass().getName())); result.add(new PropertyBean(prefix + " Delegate ID" + suffix, getRawActionId((AnAction)delegate))); } result.add(new PropertyBean(prefix + " Delegate toString" + suffix, delegate)); object = delegate; depth++; } return result; }