Improve the robustness of `Arrays.concat`
diff --git a/src/main/java/org/apache/groovy/util/Arrays.java b/src/main/java/org/apache/groovy/util/Arrays.java
index 67b8abb..de3f85e 100644
--- a/src/main/java/org/apache/groovy/util/Arrays.java
+++ b/src/main/java/org/apache/groovy/util/Arrays.java
@@ -28,7 +28,7 @@
 public class Arrays {
 
     /**
-     * Concatenate arrays
+     * Concatenate arrays and ignore null array
      *
      * @param arrays arrays to merge
      * @param <T> array component type
@@ -36,13 +36,20 @@
      */
     @SuppressWarnings("unchecked")
     public static <T> T[] concat(T[]... arrays) {
-        if (0 == arrays.length) return null;
+        if (null == arrays || 0 == arrays.length) return null;
 
-        int resultLength = java.util.Arrays.stream(arrays).map(e -> e.length).reduce(0, Integer::sum);
+        int resultLength =
+                java.util.Arrays.stream(arrays)
+                        .filter(e -> null != e)
+                        .map(e -> e.length)
+                        .reduce(0, Integer::sum);
         T[] resultArray = (T[]) Array.newInstance(arrays[0].getClass().getComponentType(), resultLength);
 
         for (int i = 0, n = arrays.length, curr = 0; i < n; i++) {
             T[] array = arrays[i];
+
+            if (null == array) continue;
+
             int length = array.length;
             System.arraycopy(array, 0, resultArray, curr, length);
             curr += length;
diff --git a/src/test/org/apache/groovy/util/ArraysTest.java b/src/test/org/apache/groovy/util/ArraysTest.java
index 37ca71b..f6e15d3 100644
--- a/src/test/org/apache/groovy/util/ArraysTest.java
+++ b/src/test/org/apache/groovy/util/ArraysTest.java
@@ -25,6 +25,7 @@
     @Test
     public void testConcat0() {
         Assert.assertNull(Arrays.concat());
+        Assert.assertNull(Arrays.concat(null));
     }
 
     @Test
@@ -38,7 +39,7 @@
     @Test
     public void testConcat2() {
         Integer[] a = new Integer[] {1, 2};
-        Integer[] b = new Integer[0];
+        Integer[] b = null;
         Integer[] result = Arrays.concat(a, b);
         Assert.assertNotSame(a, result);
         Assert.assertArrayEquals(new Integer[] {1, 2}, result);
@@ -47,13 +48,22 @@
     @Test
     public void testConcat3() {
         Integer[] a = new Integer[] {1, 2};
+        Integer[] b = new Integer[0];
+        Integer[] result = Arrays.concat(a, b);
+        Assert.assertNotSame(a, result);
+        Assert.assertArrayEquals(new Integer[] {1, 2}, result);
+    }
+
+    @Test
+    public void testConcat4() {
+        Integer[] a = new Integer[] {1, 2};
         Integer[] b = new Integer[] {3, 4};
         Integer[] result = Arrays.concat(a, b);
         Assert.assertArrayEquals(new Integer[] {1, 2, 3, 4}, result);
     }
 
     @Test
-    public void testConcat4() {
+    public void testConcat5() {
         Integer[] a = new Integer[] {1, 2};
         Integer[] b = new Integer[] {3, 4};
         Integer[] c = new Integer[] {5, 6, 7, 8, 9};