code: public ContextData addData(Object key, Object value) {
          if (key == null) {
              throw new IllegalArgumentException("key cannot be null");
          }
          return new ContextData(this, key, value);
      }
docs: Adds a new immutable {@link ContextData} object with the specified key-value pair to
  the existing {@link ContextData} chain.
  
  @param key the key
  @param value the value
  @return the new {@link ContextData} object containing the specified pair added to the set of pairs