docs: public static <T> void copyFields(Class<T> type, T dest, T source) {
  		Class<?> clazz = type;
  		while (clazz != null && !Object.class.equals(clazz)) {
  			for (final Field field : clazz.getDeclaredFields()) {
  				if (!Modifier.isStatic(field.getModifiers())) {
  					field.setAccessible(true);
  					try {
  						field.set(dest, field.get(source));
  					} catch (IllegalArgumentException | IllegalAccessException e) {
  						throw new Error(e);
  					}
  				}
  			}
  			clazz = clazz.getSuperclass();
  		}
  	}