jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java
changeset 23338 0a84d339822a
parent 23059 4aca6147df88
child 24572 5c9e5961d21c
--- a/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java	Tue Mar 11 14:18:46 2014 +0100
+++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java	Tue Mar 11 19:54:33 2014 +0400
@@ -736,16 +736,17 @@
     @LambdaForm.Hidden
     static Object guardWithCatch(MethodHandle target, Class<? extends Throwable> exType, MethodHandle catcher,
                                  Object... av) throws Throwable {
+        // Use asFixedArity() to avoid unnecessary boxing of last argument for VarargsCollector case.
         try {
-            return target.invokeWithArguments(av);
+            return target.asFixedArity().invokeWithArguments(av);
         } catch (Throwable t) {
             if (!exType.isInstance(t)) throw t;
-            Object[] args = prepend(t, av);
-            return catcher.invokeWithArguments(args);
+            return catcher.asFixedArity().invokeWithArguments(prepend(t, av));
         }
     }
 
     /** Prepend an element {@code elem} to an {@code array}. */
+    @LambdaForm.Hidden
     private static Object[] prepend(Object elem, Object[] array) {
         Object[] newArray = new Object[array.length+1];
         newArray[0] = elem;