private static Object[] compress(List<Expression<?>> exprs, Object[] args) { Object[] rv = new Object[exprs.size()]; int offset = 0; for (int i = 0; i < exprs.size(); i++) { Expression<?> expr = exprs.get(i); if (expr instanceof ProjectionRole) { expr = ((ProjectionRole) expr).getProjection(); } if (expr instanceof FactoryExpression<?>) { FactoryExpression<?> fe = (FactoryExpression<?>) expr; int fullArgsLength = countArguments(fe); Object[] compressed = compress(fe.getArgs(), ArrayUtils.subarray(args, offset, offset + fullArgsLength)); rv[i] = fe.newInstance(compressed); offset += fullArgsLength; } else { rv[i] = args[offset]; offset++; } } return rv; }
@Override public Beans newInstance(Object... args) { int offset = 0; Map<RelationalPath<?>, Object> beans = new HashMap<RelationalPath<?>, Object>(); for (Map.Entry<RelationalPath<?>, QBean<?>> entry : qBeans.entrySet()) { RelationalPath<?> path = entry.getKey(); QBean<?> qBean = entry.getValue(); int argsSize = qBean.getArgs().size(); Object[] subArgs = ArrayUtils.subarray(args, offset, offset + argsSize); beans.put(path, qBean.newInstance(subArgs)); offset += argsSize; } return new Beans(beans); }
private static Object[] compress(List<Expression<?>> exprs, Object[] args) { Object[] rv = new Object[exprs.size()]; int offset = 0; for (int i = 0; i < exprs.size(); i++) { Expression<?> expr = exprs.get(i); if (expr instanceof ProjectionRole) { expr = ((ProjectionRole) expr).getProjection(); } if (expr instanceof FactoryExpression<?>) { FactoryExpression<?> fe = (FactoryExpression<?>) expr; int fullArgsLength = countArguments(fe); Object[] compressed = compress(fe.getArgs(), ArrayUtils.subarray(args, offset, offset + fullArgsLength)); rv[i] = fe.newInstance(compressed); offset += fullArgsLength; } else { rv[i] = args[offset]; offset++; } } return rv; }