List<Value> terms = new ArrayList<Value>();
List<String> aliases = new ArrayList<String>();
List<String> clauses = new ArrayList<String>();
// now assign the arguments to the select clause as the projections
assignProjections(right(node), exps, terms, aliases, clauses);
FillStrategy fill = new FillStrategy.NewInstance(constructor);
ResultShape<?> cons = new ResultShape(constructor, fill);
for (Value val : terms) {
Class<?> type = val.getType();
cons.nest(new ResultShape(type, new FillStrategy.Assign(), type.isPrimitive()));
}