code: public <T> T deepClone(final T o) {
          if (o == null) {
              return null;
          }
          if (!this.cloningEnabled) {
              return o;
          }
          if (this.dumpClonedClasses) {
              System.out.println("start>" + o.getClass());
          }
          final Map<Object, Object> clones = new IdentityHashMap<Object, Object>(16);
          try {
              return cloneInternal(o, clones);
          } catch (final IllegalAccessException e) {
              throw new RuntimeException("error during cloning of " + o, e);
          }
      }
docs: deep clones "o".
  
  @param <T>
  the type of "o"
  @param o
  the object to be deep-cloned
  @return a deep-clone of "o".