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