@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } for (int i = paramTypes.length - 1; i < args.length; i++) { if (args[i] == null) { args[i] = defaultInstance; } } return args; }
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; }
@Test public void test() { Object[] array = ArrayUtils.combine(5, new Object[]{"a","b"}, new Object[]{"c","d","e"}); assertEquals(Arrays.asList("a","b","c","d","e"), Arrays.asList(array)); }
@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } for (Integer location : primitiveLocations) { if (args[location] == null) { Class<?> primitiveClass = paramTypes[location]; args[location] = defaultPrimitives.getInstance(primitiveClass); } } return args; }
@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); }
@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } int current = 0; // constructor args Object[] cargs = new Object[paramTypes.length]; for (int i = 0; i < cargs.length - 1; i++) { set(cargs, i, args[current++]); } // array with vargs int size = args.length - cargs.length + 1; Object vargs = Array.newInstance( componentType, size); cargs[cargs.length - 1] = vargs; for (int i = 0; i < Array.getLength(vargs); i++) { set(vargs, i, args[current++]); } return cargs; }
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; }
@Test public void getDefaultConstructor() { Class<?>[] args = {}; Constructor<?> emptyDefaultConstructor = getConstructor(ProjectionExample.class, args); Constructor<?> nullDefaultConstructor = getConstructor(ProjectionExample.class, null); assertNotNull(emptyDefaultConstructor); assertNotNull(nullDefaultConstructor); assertTrue(isEmpty(emptyDefaultConstructor.getParameterTypes()) && isEmpty(nullDefaultConstructor.getParameterTypes())); }
@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } for (int i = paramTypes.length - 1; i < args.length; i++) { if (args[i] == null) { args[i] = defaultInstance; } } return args; }
private <E extends Collection<Path<?>>> E filterUpdatePaths(E paths, Path<?>[] duplicatePaths) { if (ArrayUtils.isEmpty(duplicatePaths)) { return paths; } else { List<Path<?>> updates = new ArrayList<>(paths.size()); for (Path<?> path : paths) { for (Path<?> duplicatePath : duplicatePaths) { if (Objects.equals(path, duplicatePath)) { updates.add(path); break; } } } return (E) updates; } }
@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } for (Integer location : primitiveLocations) { if (args[location] == null) { Class<?> primitiveClass = paramTypes[location]; args[location] = defaultPrimitives.getInstance(primitiveClass); } } return args; }
@Override public Object[] apply(Object[] args) { if (isEmpty(args)) { return args; } int current = 0; // constructor args Object[] cargs = new Object[paramTypes.length]; for (int i = 0; i < cargs.length - 1; i++) { set(cargs, i, args[current++]); } // array with vargs int size = args.length - cargs.length + 1; Object vargs = Array.newInstance( componentType, size); cargs[cargs.length - 1] = vargs; for (int i = 0; i < Array.getLength(vargs); i++) { set(vargs, i, args[current++]); } return cargs; }