private static void addOptions(List<Field> fields, List<DecompilerOption> options, Map<String, Object> defaults, Plugin plugin) {
    for (Field field : fields) {
      IFernflowerPreferences.Name name = field.getAnnotation(IFernflowerPreferences.Name.class);
      IFernflowerPreferences.Description description = field.getAnnotation(IFernflowerPreferences.Description.class);
      IFernflowerPreferences.Type type = field.getAnnotation(IFernflowerPreferences.Type.class);

      String paramName;
      try {
        paramName = (String) field.get(null);
      } catch (IllegalAccessException e) {
        IFernflowerPreferences.ShortName shortName = field.getAnnotation(IFernflowerPreferences.ShortName.class);
        if (shortName == null) {
          continue;
        }
        paramName = shortName.value();
      }

      if (name == null || description == null || type == null) {
        continue;
      }

      String friendlyName = name.value();
      String friendlyDescription = description.value();
      Type friendlyType = type.value();
      Object defaultValue = defaults.get(paramName);
      String defaultValueString = defaultValue != null ? defaultValue.toString() : null;

      options.add(new DecompilerOption(
        paramName,
        friendlyName,
        friendlyDescription,
        friendlyType,
        plugin != null ? plugin.id() : null,
        defaultValueString
      ));
    }
  }
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