public <T1, T2, T3> ReactorMapper3.DistinctLimitOffset<T1, T2, T3> select(Projection<T1> proj1, Projection<T2> proj2, Projection<T3> proj3) {
    Query newQuery = this.query.addProjections(Matchers.toExpression(proj1), Matchers.toExpression(proj2), Matchers.toExpression(proj3));
    return new ReactorMappers.Mapper3<>(newQuery, session);
  }
Reader returning <a href="https://projectreactor.io">Reactor</a> types
criteria/reactor/src/org/immutables/criteria/reactor/ReactorReader.java