1/* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5package org.mockito.internal.invocation; 6 7import org.hamcrest.Matcher; 8import org.mockito.internal.matchers.ArrayEquals; 9import org.mockito.internal.matchers.Equals; 10import org.mockito.internal.util.collections.ArrayUtils; 11 12import java.util.ArrayList; 13import java.util.List; 14 15/** 16 * by Szczepan Faber, created at: 3/31/12 17 */ 18public class ArgumentsProcessor { 19 // expands array varArgs that are given by runtime (1, [a, b]) into true 20 // varArgs (1, a, b); 21 public static Object[] expandVarArgs(final boolean isVarArgs, final Object[] args) { 22 if (!isVarArgs || new ArrayUtils().isEmpty(args) || args[args.length - 1] != null && !args[args.length - 1].getClass().isArray()) { 23 return args == null ? new Object[0] : args; 24 } 25 26 final int nonVarArgsCount = args.length - 1; 27 Object[] varArgs; 28 if (args[nonVarArgsCount] == null) { 29 // in case someone deliberately passed null varArg array 30 varArgs = new Object[] { null }; 31 } else { 32 varArgs = ArrayEquals.createObjectArray(args[nonVarArgsCount]); 33 } 34 final int varArgsCount = varArgs.length; 35 Object[] newArgs = new Object[nonVarArgsCount + varArgsCount]; 36 System.arraycopy(args, 0, newArgs, 0, nonVarArgsCount); 37 System.arraycopy(varArgs, 0, newArgs, nonVarArgsCount, varArgsCount); 38 return newArgs; 39 } 40 41 public static List<Matcher> argumentsToMatchers(Object[] arguments) { 42 List<Matcher> matchers = new ArrayList<Matcher>(arguments.length); 43 for (Object arg : arguments) { 44 if (arg != null && arg.getClass().isArray()) { 45 matchers.add(new ArrayEquals(arg)); 46 } else { 47 matchers.add(new Equals(arg)); 48 } 49 } 50 return matchers; 51 } 52} 53