static L nonStaticNonPrimitiveNonTransientFieldObjects(O o) { if (o == null) null; new L 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; }