docs: public static CategorizedExpressions extractAggregationsAndProperties(
  			List<Expression> expressions,
  			Supplier<String> uniqueAttributeGenerator) {
  		AggregationAndPropertiesSplitter splitter = new AggregationAndPropertiesSplitter(uniqueAttributeGenerator);
  		expressions.forEach(expr -> expr.accept(splitter));
  
  		List<Expression> projections = expressions.stream()
  			.map(expr -> expr.accept(new AggregationAndPropertiesReplacer(splitter.aggregates,
  				splitter.properties)))
  			.collect(Collectors.toList());
  
  		List<Expression> aggregates = nameExpressions(splitter.aggregates);
  		List<Expression> properties = nameExpressions(splitter.properties);
  
  		return new CategorizedExpressions(projections, aggregates, properties);
  	}