code: @SuppressWarnings("unchecked")
    @Override
    public T read(JsonReader in) throws IOException {
      List<Exception> exceptions = new ArrayList<>(subtypes.length);
      ReaderSupplier readerSupplier = readForSupplier(in);
      for (TypeAdapter<?> typeAdapter : adapters) {
        try {
          return (T) typeAdapter.read(readerSupplier.create());
        } catch (Exception ex) {
          exceptions.add(ex);
        }
      }
      JsonParseException failure = new JsonParseException(
          String.format(
              "Cannot parse %s with following subtypes: %s",
              type,
              Arrays.toString(subtypes)));
      for (Exception exception : exceptions) {
        failure.addSuppressed(exception);
      }
      throw failure;
    }
docs: enforced by constructor parameters.