docs: public Object unmarshal(HierarchicalStreamReader reader, Object root, DataHolder dataHolder, boolean nullOut) {
          // init() is too early to do this
          // defensive because some use of XStream happens before plugins are initialized.
          Jenkins h = Jenkins.getInstanceOrNull();
          if(h!=null && h.pluginManager!=null && h.pluginManager.uberClassLoader!=null) {
              setClassLoader(h.pluginManager.uberClassLoader);
          }
  
          Object o;
          if (root == null || !nullOut) {
              o = super.unmarshal(reader, root, dataHolder);
          } else {
              Set<String> topLevelFields = new HashSet<>();
              o = super.unmarshal(new ReaderWrapper(reader) {
                  int depth;
                  @Override
                  public void moveUp() {
                      if (--depth == 0) {
                          topLevelFields.add(getNodeName());
                      }
                      super.moveUp();
                  }
                  @Override
                  public void moveDown() {
                      try {
                          super.moveDown();
                      } finally {
                          depth++;
                      }
                  }
              }, root, dataHolder);
              if (o == root && getConverterLookup().lookupConverterForType(o.getClass()) instanceof RobustReflectionConverter) {
                  getReflectionProvider().visitSerializableFields(o, (String name, Class type, Class definedIn, Object value) -> {
                      if (topLevelFields.contains(name)) {
                          return;
                      }
                      Field f = Fields.find(definedIn, name);
                      Object v;
                      if (type.isPrimitive()) {
                          // oddly not in com.thoughtworks.xstream.core.util.Primitives
                          v = ReflectionUtils.getVmDefaultValueForPrimitiveType(type);
                          if (v.equals(value)) {
                              return;
                          }
                      } else {
                          if (value == null) {
                              return;
                          }
                          v = null;
                      }
                      LOGGER.log(Level.FINE, "JENKINS-21017: nulling out {0} in {1}", new Object[] {f, o});
                      Fields.write(f, o, v);
                  });
              }
          }
  
          if (oldData.get()!=null) {
              oldData.remove();
              if (o instanceof Saveable) OldDataMonitor.report((Saveable)o, "1.106");
          }
          return o;
      }