public static Map<Plugin, List<DecompilerOption>> getAllByPlugin() {
    Map<Plugin, List<DecompilerOption>> options = new HashMap<>();

    List<Field> fields = Arrays.stream(IFernflowerPreferences.class.getDeclaredFields())
      .filter(field -> field.getType() == String.class)
      .toList();

    Map<String, Object> defaults = IFernflowerPreferences.DEFAULTS;
    List<DecompilerOption> coreOptions = new ArrayList<>();
    addOptions(fields, coreOptions, defaults, null);
    coreOptions.sort(DecompilerOption::compareTo);
    options.put(null, coreOptions);

    PluginContext ctx = new PluginContext();
    ctx.findPlugins();

    for (Plugin plugin : ctx.getPlugins()) {
      PluginOptions opt = plugin.getPluginOptions();

      if (opt != null) {
        var opts = opt.provideOptions();

        List<Field> pluginFields = Arrays.stream(opts.a.getDeclaredFields())
          .filter(field -> field.getType() == String.class)
          .toList();

        Map<String, Object> pluginDefaults = new HashMap<>();
        opts.b.accept(pluginDefaults::put);

        List<DecompilerOption> pluginOptions = new ArrayList<>();
        addOptions(pluginFields, pluginOptions, pluginDefaults, plugin);

        pluginOptions.sort(DecompilerOption::compareTo);

        options.put(plugin, pluginOptions);
      }
    }

    return options;
  }
Get all decompiler options from all plugins and the core decompiler, grouped by plugin.
Calling {@link Map#get} with {@code null} will return the core decompiler options.
@return A map of plugins to their decompiler options, sorted by id within each plugin.
src/org/jetbrains/java/decompiler/api/DecompilerOption.java