code: static List<Field> getAccessibleFields(final Class<?> source) {
          return doPrivileged(new PrivilegedAction<List<Field>>() {
              public List<Field> run() {
                  List<Field> foundFields = new ArrayList<Field>();
                  for (Field field : source.getDeclaredFields()) {
                      // omit final fields
                      if (Modifier.isFinal(field.getModifiers())) {
                          continue;
                      }
  
                      if (!field.isAccessible()) {
                          field.setAccessible(true);
                      }
                      foundFields.add(field);
                  }
                  return foundFields;
              }
          });
      }
docs: -------------------------------------------------------------------------------||