code: public QueryPlus<T> withQueryMetrics(QueryToolChest<T, ? extends Query<T>> queryToolChest)
    {
      if (queryMetrics != null) {
        return this;
      } else {
        final QueryMetrics metrics = ((QueryToolChest) queryToolChest).makeMetrics(query);
  
        if (identity != null) {
          metrics.identity(identity);
        }
  
        return new QueryPlus<>(query, metrics, identity);
      }
    }
docs: Returns the same QueryPlus object, if it already has {@link QueryMetrics} ({@link #getQueryMetrics()} returns not
  null), or returns a new QueryPlus object with {@link Query} from this QueryPlus and QueryMetrics created using the
  given {@link QueryToolChest}, via {@link QueryToolChest#makeMetrics(Query)} method.
  
  By convention, callers of {@code withQueryMetrics()} must also call .getQueryMetrics().emit() on the returned
  QueryMetrics object, regardless if this object is the same as the object on which .withQueryMetrics() was initially
  called (i. e. it already had non-null QueryMetrics), or if it is a new QueryPlus object. See {@link
  MetricsEmittingQueryRunner} for example.