private ResultShape<?> evalResultShape(CriteriaQueryImpl<?> q) {
List<Selection<?>> selections = q.getSelectionList();
Class<?> resultClass = q.getResultType();
ResultShape<?> result = null;
if (q.isMultiselect()) {
result = new ResultShape(resultClass, CompoundSelections.getFillStrategy(q.getSelection()));
for (Selection<?> term : selections) {
result.nest(getShape(q, result, term));
}
} else { // not multiselect
FillStrategy<?> strategy = new FillStrategy.Assign();
if (Tuple.class.isAssignableFrom(resultClass)) {
TupleFactory factory = new TupleFactory(selections.toArray(new TupleElement[selections.size()]));
strategy = new FillStrategy.Factory<Tuple>(factory, TupleImpl.PUT);
}
result = new ResultShape(resultClass, strategy);
if (q.getSelectionList() == null) {
return result;
}
if (q.getSelectionList().size() == 1) {
result = getShape(q, result, q.getSelectionList().get(0));