package org.mvel2.util; import java.lang.reflect.*; public class Varargs { public static Object[] normalizeArgsForVarArgs(Class<?>[] parameterTypes, Object[] args, boolean isVarArgs) { if (!isVarArgs) return args; Object lastArgument = args.length > 0 ? args[args.length - 1] : Array.newInstance(parameterTypes[parameterTypes.length-1].getComponentType(), 0); if (parameterTypes.length == args.length && (lastArgument == null || lastArgument.getClass().isArray())) return args; int varargLength = args.length - parameterTypes.length + 1; Object vararg = Array.newInstance(parameterTypes[parameterTypes.length-1].getComponentType(), varargLength); for (int i = 0; i < varargLength; i++) Array.set(vararg, i, args[parameterTypes.length - 1 + i]); Object[] normalizedArgs = new Object[parameterTypes.length]; for (int i = 0; i < parameterTypes.length - 1; i++) normalizedArgs[i] = args[i]; normalizedArgs[parameterTypes.length - 1] = vararg; return normalizedArgs; } public static Class<?> paramTypeVarArgsSafe(Class<?>[] parameterTypes, int i, boolean isVarArgs) { if (!isVarArgs) return parameterTypes[i]; if (i < parameterTypes.length-1) return parameterTypes[i]; return parameterTypes[parameterTypes.length-1].getComponentType(); } }