public SyncMapperTuple.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 SyncMappers.MapperTuple(newQuery, session);
  }
Synchronous (blocking) reader operations.
@param <T> entity type
criteria/common/src/org/immutables/criteria/repository/sync/SyncReader.java