private <T> T cloneObject(T o, Map<Object, Object> clones, Class<T> clz) throws IllegalAccessException { final T newInstance = newInstance(clz); if (clones != null) { clones.put(o, newInstance); } final List<Field> fields = allFields(clz); for (final Field field : fields) { final int modifiers = field.getModifiers(); if (!Modifier.isStatic(modifiers)) { if (!(nullTransient && Modifier.isTransient(modifiers))) { // request by Jonathan : transient fields can be null-ed final Object fieldObject = field.get(o); final boolean shouldClone = (cloneSynthetics || !field.isSynthetic()) && (cloneAnonymousParent || !isAnonymousParent(field)); final Object fieldObjectClone = clones != null ? (shouldClone ? applyCloningStrategy(clones, o, fieldObject, field) : fieldObject) : fieldObject; field.set(newInstance, fieldObjectClone); if (dumpCloned != null && fieldObjectClone != fieldObject) { dumpCloned.cloning(field, o.getClass()); } } } } return newInstance; }
private <T> T cloneObject(T o, Map<Object, Object> clones, Class<T> clz) throws IllegalAccessException { final T newInstance = newInstance(clz); if (clones != null) { clones.put(o, newInstance); } final List<Field> fields = allFields(clz); for (final Field field : fields) { final int modifiers = field.getModifiers(); if (!Modifier.isStatic(modifiers)) { if (!(nullTransient && Modifier.isTransient(modifiers))) { // request by Jonathan : transient fields can be null-ed final Object fieldObject = field.get(o); final boolean shouldClone = (cloneSynthetics || !field.isSynthetic()) && (cloneAnonymousParent || !isAnonymousParent(field)); final Object fieldObjectClone = clones != null ? (shouldClone ? applyCloningStrategy(clones, o, fieldObject, field) : fieldObject) : fieldObject; field.set(newInstance, fieldObjectClone); if (dumpCloned != null && fieldObjectClone != fieldObject) { dumpCloned.cloning(field, o.getClass()); } } } } return newInstance; }