docs: @Override
    public final Field[] retrieveFields(final Class<?> clazz) {
      Set<Field> fieldsSet = new HashSet<Field>();
      for (Field fld : clazz.getDeclaredFields()) {
        int modifiersMask = fld.getModifiers();
        if ((modifiersMask & Modifier.PRIVATE) > 0
              && (modifiersMask & Modifier.STATIC) == 0) {
          fieldsSet.add(fld);
        }
      }
      final Class<?> superClazz = clazz.getSuperclass();
      if (superClazz != null && superClazz != java.lang.Object.class) {
        for (Field fld : retrieveFields(superClazz)) {
          fieldsSet.add(fld);
        }
      }
      return fieldsSet.toArray(new Field[fieldsSet.size()]);
    }