Add support for backporting List.of(E...)

Test: tools/test.py --no-internal -v *ListBackportJava9Test*
Change-Id: I2cc66c3f299f86694118f2426c60d4f245354d92
diff --git a/src/test/examplesJava9/backport/ListBackportJava9Main.java b/src/test/examplesJava9/backport/ListBackportJava9Main.java
index 88d20ab..4c8ae88 100644
--- a/src/test/examplesJava9/backport/ListBackportJava9Main.java
+++ b/src/test/examplesJava9/backport/ListBackportJava9Main.java
@@ -13,6 +13,7 @@
     testOf1();
     testOf2();
     testOf10();
+    testOfVarargs();
   }
 
   private static void testOf0() {
@@ -103,6 +104,45 @@
     }
   }
 
+  private static void testOfVarargs() {
+    Object anObject0 = new Object();
+    Object anObject6 = new Object();
+    Object anObject10 = new Object();
+    List<Object> ofObject =
+        List.of(anObject0, new Object(), new Object(), new Object(), new Object(), new Object(),
+            anObject6, new Object(), new Object(), new Object(), anObject10);
+    assertEquals(11, ofObject.size());
+    assertSame(anObject0, ofObject.get(0));
+    assertSame(anObject6, ofObject.get(6));
+    assertSame(anObject10, ofObject.get(10));
+    assertMutationNotAllowed(ofObject);
+
+    List<Integer> ofInteger = List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+    assertEquals(11, ofInteger.size());
+    assertEquals(0, ofInteger.get(0));
+    assertEquals(6, ofInteger.get(6));
+    assertEquals(10, ofInteger.get(10));
+
+    List<Object> ofMixed = List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, anObject10);
+    assertEquals(11, ofMixed.size());
+    assertEquals(0, ofMixed.get(0));
+    assertEquals(6, ofMixed.get(6));
+    assertSame(anObject10, ofMixed.get(10));
+    assertMutationNotAllowed(ofMixed);
+
+    // Ensure the supplied mutable array is not used directly since it is mutable.
+    Object[] mutableArray = { anObject0 };
+    List<Object> ofMutableArray = List.of(mutableArray);
+    mutableArray[0] = anObject10;
+    assertSame(anObject0, ofMutableArray.get(0));
+
+    try {
+      List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, null);
+      throw new AssertionError();
+    } catch (NullPointerException expected) {
+    }
+  }
+
   private static void assertMutationNotAllowed(List<Object> ofObject) {
     try {
       ofObject.add(new Object());