docs: static Map<SerializedField, Object> fieldsDelta(Map<SerializedField, Object> base,
              Map<SerializedField, Object> child) {
          Map<SerializedField, Object> m = new EnumMap<SerializedField, Object>(child);
  
          for (Map.Entry<SerializedField, Object> baseEntry : base.entrySet()) {
              SerializedField f = baseEntry.getKey();
              if (m.containsKey(f) && ConfigImplUtil.equalsHandlingNull(baseEntry.getValue(), m.get(f))) {
                  // if field is unchanged, just remove it so we inherit
                  m.remove(f);
              } else if (!m.containsKey(f)) {
                  // if field has been removed, we have to add a deletion entry
                  switch (f) {
                  case ORIGIN_DESCRIPTION:
                      throw new ConfigException.BugOrBroken("origin missing description field? " + child);
                  case ORIGIN_LINE_NUMBER:
                      m.put(SerializedField.ORIGIN_LINE_NUMBER, -1);
                      break;
                  case ORIGIN_END_LINE_NUMBER:
                      m.put(SerializedField.ORIGIN_END_LINE_NUMBER, -1);
                      break;
                  case ORIGIN_TYPE:
                      throw new ConfigException.BugOrBroken("should always be an ORIGIN_TYPE field");
                  case ORIGIN_URL:
                      m.put(SerializedField.ORIGIN_NULL_URL, "");
                      break;
                  case ORIGIN_RESOURCE:
                      m.put(SerializedField.ORIGIN_NULL_RESOURCE, "");
                      break;
                  case ORIGIN_COMMENTS:
                      m.put(SerializedField.ORIGIN_NULL_COMMENTS, "");
                      break;
                  case ORIGIN_NULL_URL: // FALL THRU
                  case ORIGIN_NULL_RESOURCE: // FALL THRU
                  case ORIGIN_NULL_COMMENTS:
                      throw new ConfigException.BugOrBroken("computing delta, base object should not contain " + f + " "
                              + base);
                  case END_MARKER:
                  case ROOT_VALUE:
                  case ROOT_WAS_CONFIG:
                  case UNKNOWN:
                  case VALUE_DATA:
                  case VALUE_ORIGIN:
                      throw new ConfigException.BugOrBroken("should not appear here: " + f);
                  }
              } else {
                  // field is in base and child, but differs, so leave it
              }
          }
  
          return m;
      }