docs: void toJSONString(final Map<ReferenceEqualityKey<JSONReference>, CharSequence> jsonReferenceToId,
              final boolean includeNullValuedFields, final int depth, final int indentWidth,
              final StringBuilder buf) {
          final boolean prettyPrint = indentWidth > 0;
          final int n = items.size();
          int numDisplayedFields;
          if (includeNullValuedFields) {
              numDisplayedFields = n;
          } else {
              numDisplayedFields = 0;
              for (final Entry<String, Object> item : items) {
                  if (item.getValue() != null) {
                      numDisplayedFields++;
                  }
              }
          }
          if (objectId == null && numDisplayedFields == 0) {
              buf.append("{}");
          } else {
              buf.append(prettyPrint ? "{\n" : "{");
              if (objectId != null) {
                  // id will be non-null if this object does not have an @Id field, but was referenced by
                  // another object (need to include ID_TAG)
                  if (prettyPrint) {
                      JSONUtils.indent(depth + 1, indentWidth, buf);
                  }
                  buf.append('"');
                  buf.append(JSONUtils.ID_KEY);
                  buf.append(prettyPrint ? "\": " : "\":");
                  JSONSerializer.jsonValToJSONString(objectId, jsonReferenceToId, includeNullValuedFields, depth + 1,
                          indentWidth, buf);
                  if (numDisplayedFields > 0) {
                      buf.append(',');
                  }
                  if (prettyPrint) {
                      buf.append('\n');
                  }
              }
              for (int i = 0, j = 0; i < n; i++) {
                  final Entry<String, Object> item = items.get(i);
                  final Object val = item.getValue();
                  if (val != null || includeNullValuedFields) {
                      final String key = item.getKey();
                      if (key == null) {
                          // Keys must be quoted, so the unquoted null value cannot be a key
                          // (Should not happen -- JSONParser.parseJSONObject checks for null keys)
                          throw new IllegalArgumentException("Cannot serialize JSON object with null key");
                      }
                      if (prettyPrint) {
                          JSONUtils.indent(depth + 1, indentWidth, buf);
                      }
                      buf.append('"');
                      JSONUtils.escapeJSONString(key, buf);
                      buf.append(prettyPrint ? "\": " : "\":");
                      JSONSerializer.jsonValToJSONString(val, jsonReferenceToId, includeNullValuedFields, depth + 1,
                              indentWidth, buf);
                      if (++j < numDisplayedFields) {
                          buf.append(',');
                      }
                      if (prettyPrint) {
                          buf.append('\n');
                      }
                  }
              }
              if (prettyPrint) {
                  JSONUtils.indent(depth, indentWidth, buf);
              }
              buf.append('}');
          }
      }