src/share/classes/java/lang/invoke/MethodHandleImpl.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File jdk Cdiff src/share/classes/java/lang/invoke/MethodHandleImpl.java

src/share/classes/java/lang/invoke/MethodHandleImpl.java

Print this page
rev 10271 : 8037209: Improvements and cleanups to bytecode assembly for lambda forms
Reviewed-by: vlivanov, psandoz
Contributed-by: john.r.rose@oracle.com
rev 10272 : 8038261: JSR292: cache and reuse typed array accessors
Reviewed-by: vlivanov, psandoz
Contributed-by: john.r.rose@oracle.com
rev 10273 : 8049555: Move varargsArray from sun.invoke.util package to java.lang.invoke
Reviewed-by: ?
rev 10274 : 8050052: Small cleanups in java.lang.invoke code
Reviewed-by: ?
rev 10276 : 8050166: Get rid of some package-private methods on arguments in j.l.i.MethodHandle
Reviewed-by: vlivanov, ?
Contributed-by: john.r.rose@oracle.com
rev 10277 : 8050173: Add j.l.i.MethodHandle.copyWith(MethodType, LambdaForm)
Reviewed-by: vlivanov, ?
Contributed-by: john.r.rose@oracle.com

*** 82,92 **** if (mh.type() != correctType) { assert(mh.type().parameterType(0) == Object[].class); assert((isSetter ? mh.type().parameterType(2) : mh.type().returnType()) == Object.class); assert(isSetter || correctType.parameterType(0).getComponentType() == correctType.returnType()); // safe to view non-strictly, because element type follows from array type ! mh = mh.viewAsType(correctType); } // Atomically update accessor cache. synchronized(cache) { if (cache[cacheIndex] == null) { cache[cacheIndex] = mh; --- 82,92 ---- if (mh.type() != correctType) { assert(mh.type().parameterType(0) == Object[].class); assert((isSetter ? mh.type().parameterType(2) : mh.type().returnType()) == Object.class); assert(isSetter || correctType.parameterType(0).getComponentType() == correctType.returnType()); // safe to view non-strictly, because element type follows from array type ! mh = mh.viewAsType(correctType, false); } // Atomically update accessor cache. synchronized(cache) { if (cache[cacheIndex] == null) { cache[cacheIndex] = mh;
*** 404,425 **** asCollectorCache = collector; return asTypeCache = collector.asType(newType); } @Override ! MethodHandle setVarargs(MemberName member) { ! if (member.isVarargs()) return this; ! return asFixedArity(); } @Override ! MethodHandle viewAsType(MethodType newType) { ! if (newType.lastParameterType() != type().lastParameterType()) ! throw new InternalError(); ! MethodHandle newTarget = asFixedArity().viewAsType(newType); ! // put back the varargs bit: ! return new AsVarargsCollector(newTarget, newType, arrayType); } @Override MemberName internalMemberName() { return asFixedArity().internalMemberName(); --- 404,428 ---- asCollectorCache = collector; return asTypeCache = collector.asType(newType); } @Override ! boolean viewAsTypeChecks(MethodType newType, boolean strict) { ! super.viewAsTypeChecks(newType, true); ! if (strict) return true; ! // extra assertion for non-strict checks: ! assert (type().lastParameterType().getComponentType() ! .isAssignableFrom( ! newType.lastParameterType().getComponentType())) ! : Arrays.asList(this, newType); ! return true; } @Override ! MethodHandle setVarargs(MemberName member) { ! if (member.isVarargs()) return this; ! return asFixedArity(); } @Override MemberName internalMemberName() { return asFixedArity().internalMemberName();
*** 432,441 **** --- 435,449 ---- /*non-public*/ @Override boolean isInvokeSpecial() { return asFixedArity().isInvokeSpecial(); } + + @Override + MethodHandle copyWith(MethodType mt, LambdaForm lf) { + throw newIllegalArgumentException("do not use this"); + } } /** Factory method: Spread selected argument. */ static MethodHandle makeSpreadArguments(MethodHandle target, Class<?> spreadArgType, int spreadArgPos, int spreadArgCount) {
*** 994,1006 **** } @Override boolean isInvokeSpecial() { return target.isInvokeSpecial(); } @Override ! MethodHandle viewAsType(MethodType newType) { ! return new WrappedMember(target, newType, member, callerClass); } } static MethodHandle makeWrappedMember(MethodHandle target, MemberName member) { if (member.equals(target.internalMemberName())) --- 1002,1015 ---- } @Override boolean isInvokeSpecial() { return target.isInvokeSpecial(); } + @Override ! MethodHandle copyWith(MethodType mt, LambdaForm lf) { ! throw newIllegalArgumentException("do not use this"); } } static MethodHandle makeWrappedMember(MethodHandle target, MemberName member) { if (member.equals(target.internalMemberName()))
src/share/classes/java/lang/invoke/MethodHandleImpl.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File