code: public static CallOptions withAnnotation(CallOptions callOptions, Object annotation) {
      Collection<Object> existingAnnotations = callOptions.getOption(CRONET_ANNOTATIONS_KEY);
      ArrayList<Object> newAnnotations;
      if (existingAnnotations == null) {
        newAnnotations = new ArrayList<>();
      } else {
        newAnnotations = new ArrayList<>(existingAnnotations);
      }
      newAnnotations.add(annotation);
      return callOptions.withOption(
          CronetCallOptions.CRONET_ANNOTATIONS_KEY, Collections.unmodifiableList(newAnnotations));
    }
docs: Returns a copy of {@code callOptions} with {@code annotation} included as one of the Cronet
  annotation objects. When an RPC is made using a {@link CallOptions} instance returned by this
  method, the annotation objects will be attached to the underlying Cronet bidirectional stream.
  When the stream finishes, the user can retrieve the annotation objects via {@link
  org.chromium.net.RequestFinishedInfo.Listener}.
  
  @param annotation the object to attach to the Cronet stream