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