code: public static <T> T[] addAll(final T[] array1, final T[] array2)
      {
          if (array1 == null)
          {
              return shallowCopy(array2);
          }
          else if (array2 == null)
          {
              return shallowCopy(array1);
          }
          final T[] newArray = (T[]) Array.newInstance(array1.getClass().getComponentType(), array1.length + array2.length);
          System.arraycopy(array1, 0, newArray, 0, array1.length);
          System.arraycopy(array2, 0, newArray, array1.length, array2.length);
          return newArray;
      }
docs: <p>Adds all the elements of the given arrays into a new array.
  </p>
  <p>The new array contains all of the element of <code>array1</code> followed
  by all of the elements <code>array2</code>. When an array is returned, it is always
  a new array.
  </p>
  <pre>
  ArrayUtilities.addAll(null, null)     = null
  ArrayUtilities.addAll(array1, null)   = cloned copy of array1
  ArrayUtilities.addAll(null, array2)   = cloned copy of array2
  ArrayUtilities.addAll([], [])         = []
  ArrayUtilities.addAll([null], [null]) = [null, null]
  ArrayUtilities.addAll(["a", "b", "c"], ["1", "2", "3"]) = ["a", "b", "c", "1", "2", "3"]
  </pre>
  
  @param array1 the first array whose elements are added to the new array, may be <code>null</code>
  @param array2 the second array whose elements are added to the new array, may be <code>null</code>
  @param <T> the array type
  @return The new array, <code>null</code> if <code>null</code> array inputs.
  The type of the new array is the type of the first array.