public ReactorMapperTuple.DistinctLimitOffset select(Iterable<Projection<?>> projections) {
    Objects.requireNonNull(projections, "projections");
    Preconditions.checkArgument(!Iterables.isEmpty(projections), "empty projections");
    List<Expression> expressions = StreamSupport.stream(projections.spliterator(), false).map(Matchers::toExpression).collect(Collectors.toList());
    Query newQuery = this.query.addProjections(expressions);
    return new ReactorMappers.MapperTuple(newQuery, session);
  }
Reader returning <a href="https://projectreactor.io">Reactor</a> types
criteria/reactor/src/org/immutables/criteria/reactor/ReactorReader.java