docs: public static List<Field> getFields(Class clazz, boolean forceAccess) {
      List<Field> result = new ArrayList<>();
      Class c = clazz;
      while (c != null) {
        for (Field declaredField : c.getDeclaredFields()) {
          if (!Modifier.isPublic(declaredField.getModifiers())) {
            if (forceAccess) {
              declaredField.setAccessible(true);
            } else {
              continue;
            }
          }
          result.add(declaredField);
        }
        c = c.getSuperclass();
      }
  
      for (Object anInterface : ClassUtils.getAllInterfaces(clazz)) {
        Collections.addAll(result, ((Class) anInterface).getDeclaredFields());
      }
  
      return result;
    }