Mercurial > hg > icedtea8-forest > jdk
changeset 11983:5e7489ac05f0 jdk8u101-b09
8155985: Persistent Parameter Processing
Reviewed-by: jrose, vlivanov, ahgross
author | mhaupt |
---|---|
date | Fri, 20 May 2016 09:40:12 +0100 |
parents | a5f673f453f0 |
children | e76eb0ed270b |
files | src/share/classes/java/lang/invoke/MethodHandles.java |
diffstat | 1 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/MethodHandles.java Thu May 19 03:50:38 2016 -0700 +++ b/src/share/classes/java/lang/invoke/MethodHandles.java Fri May 20 09:40:12 2016 +0100 @@ -28,6 +28,7 @@ import java.lang.reflect.*; import java.util.BitSet; import java.util.List; +import java.util.ArrayList; import java.util.Arrays; import sun.invoke.util.ValueConversions; @@ -2445,6 +2446,7 @@ */ public static MethodHandle dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) { + valueTypes = copyTypes(valueTypes); MethodType oldType = target.type(); // get NPE int dropped = dropArgumentChecks(oldType, pos, valueTypes); MethodType newType = oldType.insertParameterTypes(pos, valueTypes); @@ -2459,6 +2461,11 @@ return result; } + private static List<Class<?>> copyTypes(List<Class<?>> types) { + Object[] a = types.toArray(); + return Arrays.asList(Arrays.copyOf(a, a.length, Class[].class)); + } + private static int dropArgumentChecks(MethodType oldType, int pos, List<Class<?>> valueTypes) { int dropped = valueTypes.size(); MethodType.checkSlotCount(dropped);