--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Sep 10 19:19:50 2014 +0400
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Sep 10 19:19:50 2014 +0400
@@ -303,14 +303,6 @@
return new ClassCastException("Cannot cast " + obj.getClass().getName() + " to " + t.getName());
}
- static MethodHandle makeReferenceIdentity(Class<?> refType) {
- MethodType lambdaType = MethodType.genericMethodType(1).invokerType();
- Name[] names = arguments(1, lambdaType);
- names[names.length - 1] = new Name(ValueConversions.identity(), names[1]);
- LambdaForm form = new LambdaForm("identity", lambdaType.parameterCount(), names);
- return SimpleMethodHandle.make(MethodType.methodType(refType, refType), form);
- }
-
static Object[] computeValueConversions(MethodType srcType, MethodType dstType,
boolean strict, boolean monobox) {
final int INARG_COUNT = srcType.parameterCount();
@@ -1061,6 +1053,7 @@
NEW_ARRAY,
ARRAY_LOAD,
ARRAY_STORE,
+ IDENTITY,
NONE // no intrinsic associated
}
@@ -1098,6 +1091,16 @@
return super.internalProperties() +
"\n& Intrinsic="+intrinsicName;
}
+
+ @Override
+ public MethodHandle asCollector(Class<?> arrayType, int arrayLength) {
+ if (intrinsicName == Intrinsic.IDENTITY) {
+ MethodType resultType = type().asCollectorType(arrayType, arrayLength);
+ MethodHandle newArray = MethodHandleImpl.varargsArray(arrayType, arrayLength);
+ return newArray.asType(resultType);
+ }
+ return super.asCollector(arrayType, arrayLength);
+ }
}
static MethodHandle makeIntrinsic(MethodHandle target, Intrinsic intrinsicName) {