static L<Field> nonStaticNonPrimitiveNonTransientFieldObjects(O o) {
  if (o == null) null;
  new L<Field> fields;
  Class _c = _getClass(o);
  do {
    for (Field f : _c.getDeclaredFields())
      if ((f.getModifiers() & (Modifier.STATIC | Modifier.TRANSIENT)) == 0 && !isPrimitiveType(f.getType()))
        fields.add(makeAccessible(f));
    _c = _c.getSuperclass();
  } while (_c != null);
  return fields;
}