--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Fri Aug 12 14:38:02 2016 +0800
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Fri Aug 12 11:30:23 2016 +0200
@@ -77,7 +77,7 @@
private MethodHandles() { } // do not instantiate
- private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
+ static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
// See IMPL_LOOKUP below.
@@ -3268,12 +3268,11 @@
*/
public static
MethodHandle dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) {
- return dropArguments0(target, pos, copyTypes(valueTypes));
+ return dropArguments0(target, pos, copyTypes(valueTypes.toArray()));
}
- private static List<Class<?>> copyTypes(List<Class<?>> types) {
- Object[] a = types.toArray();
- return Arrays.asList(Arrays.copyOf(a, a.length, Class[].class));
+ private static List<Class<?>> copyTypes(Object[] array) {
+ return Arrays.asList(Arrays.copyOf(array, array.length, Class[].class));
}
private static
@@ -3352,13 +3351,13 @@
*/
public static
MethodHandle dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) {
- return dropArguments(target, pos, Arrays.asList(valueTypes));
+ return dropArguments0(target, pos, copyTypes(valueTypes));
}
// private version which allows caller some freedom with error handling
private static MethodHandle dropArgumentsToMatch(MethodHandle target, int skip, List<Class<?>> newTypes, int pos,
boolean nullOnFailure) {
- newTypes = copyTypes(newTypes);
+ newTypes = copyTypes(newTypes.toArray());
List<Class<?>> oldTypes = target.type().parameterList();
int match = oldTypes.size();
if (skip != 0) {
@@ -3900,10 +3899,14 @@
int foldVals = rtype == void.class ? 0 : 1;
int afterInsertPos = foldPos + foldVals;
boolean ok = (targetType.parameterCount() >= afterInsertPos + foldArgs);
- if (ok && !(combinerType.parameterList()
- .equals(targetType.parameterList().subList(afterInsertPos,
- afterInsertPos + foldArgs))))
- ok = false;
+ if (ok) {
+ for (int i = 0; i < foldArgs; i++) {
+ if (combinerType.parameterType(i) != targetType.parameterType(i + afterInsertPos)) {
+ ok = false;
+ break;
+ }
+ }
+ }
if (ok && foldVals != 0 && combinerType.returnType() != targetType.parameterType(foldPos))
ok = false;
if (!ok)