private static List<Expression<?>> expand(List<Expression<?>> exprs) {
        List<Expression<?>> rv = new ArrayList<Expression<?>>(exprs.size());
        for (Expression<?> expr : exprs) {
            if (expr instanceof ProjectionRole) {
                expr = ((ProjectionRole) expr).getProjection();
            }
            if (expr instanceof FactoryExpression<?>) {
                rv.addAll(expand(((FactoryExpression<?>) expr).getArgs()));
            } else {
                rv.add(expr);
            }
        }
        return rv;
    }
{@code FactoryExpressionAdapter} provides an adapter implementation of the {@link FactoryExpression} interface

@param <T>
querydsl-core/src/main/java/com/querydsl/core/types/FactoryExpressionUtils.java