code: protected <T> void handleCloneField(T obj, T copy, CloneDriver driver, FieldModel<T> f, IdentityHashMap<Object, Object> referencesToReuse, long stackDepth) {
  
  		final Class<?> clazz = f.getFieldClass();
  
  		if (clazz.isPrimitive()) {
  			handleClonePrimitiveField(obj, copy, driver, f, referencesToReuse);
  		} else if (!driver.isCloneSyntheticFields() && f.isSynthetic()) {
  			putFieldValue(copy, f, getFieldValue(obj, f));
  		} else {
  
  			final Object fieldObject = getFieldValue(obj, f);
  			final Object fieldObjectClone = clone(fieldObject, driver, referencesToReuse, stackDepth);
  			putFieldValue(copy, f, fieldObjectClone);
  		}
  	}
docs: Clone a Field
  @param obj The original object
  @param copy The destination object
  @param driver The CloneDriver
  @param f The FieldModel for the target field
  @param referencesToReuse Used for tracking objects that have already been seen
  @param stackDepth The current depth of the stack - used to switch from recursion to iteration if the stack grows too deep.
  @param <T> The type containing the field being cloned