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
rev 10278 : imported patch isInvokeSpecial
rev 10279 : 8050057: Improve caching of MethodHandle reinvokers
Reviewed-by: vlivanov, ?
Contributed-by: john.r.rose@oracle.com
*** 349,381 ****
MethodType type = target.type();
int last = type.parameterCount() - 1;
if (type.parameterType(last) != arrayType)
target = target.asType(type.changeParameterType(last, arrayType));
target = target.asFixedArity(); // make sure this attribute is turned off
! return new AsVarargsCollector(target, target.type(), arrayType);
}
! static class AsVarargsCollector extends MethodHandle {
private final MethodHandle target;
private final Class<?> arrayType;
private /*@Stable*/ MethodHandle asCollectorCache;
! AsVarargsCollector(MethodHandle target, MethodType type, Class<?> arrayType) {
! super(type, reinvokerForm(target));
this.target = target;
this.arrayType = arrayType;
this.asCollectorCache = target.asCollector(arrayType, 0);
}
- @Override MethodHandle reinvokerTarget() { return target; }
-
@Override
public boolean isVarargsCollector() {
return true;
}
@Override
public MethodHandle asFixedArity() {
return target;
}
@Override
--- 349,387 ----
MethodType type = target.type();
int last = type.parameterCount() - 1;
if (type.parameterType(last) != arrayType)
target = target.asType(type.changeParameterType(last, arrayType));
target = target.asFixedArity(); // make sure this attribute is turned off
! return new AsVarargsCollector(target, arrayType);
}
! private static final class AsVarargsCollector extends DelegatingMethodHandle {
private final MethodHandle target;
private final Class<?> arrayType;
private /*@Stable*/ MethodHandle asCollectorCache;
! AsVarargsCollector(MethodHandle target, Class<?> arrayType) {
! this(target.type(), target, arrayType);
! }
! AsVarargsCollector(MethodType type, MethodHandle target, Class<?> arrayType) {
! super(type, target);
this.target = target;
this.arrayType = arrayType;
this.asCollectorCache = target.asCollector(arrayType, 0);
}
@Override
public boolean isVarargsCollector() {
return true;
}
@Override
+ protected MethodHandle getTarget() {
+ return target;
+ }
+
+ @Override
public MethodHandle asFixedArity() {
return target;
}
@Override
*** 414,449 ****
.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();
- }
- @Override
- Class<?> internalCallerClass() {
- return asFixedArity().internalCallerClass();
- }
-
- /*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) {
--- 420,429 ----
*** 970,1006 ****
}
}
/** This subclass allows a wrapped method handle to be re-associated with an arbitrary member name. */
! static class WrappedMember extends MethodHandle {
private final MethodHandle target;
private final MemberName member;
private final Class<?> callerClass;
private final boolean isInvokeSpecial;
private WrappedMember(MethodHandle target, MethodType type,
MemberName member, boolean isInvokeSpecial,
Class<?> callerClass) {
! super(type, reinvokerForm(target));
this.target = target;
this.member = member;
this.callerClass = callerClass;
this.isInvokeSpecial = isInvokeSpecial;
}
@Override
- MethodHandle reinvokerTarget() {
- return target;
- }
- @Override
- public MethodHandle asTypeUncached(MethodType newType) {
- // This MH is an alias for target, except for the MemberName
- // Drop the MemberName if there is any conversion.
- return asTypeCache = target.asType(newType);
- }
- @Override
MemberName internalMemberName() {
return member;
}
@Override
Class<?> internalCallerClass() {
--- 950,976 ----
}
}
/** This subclass allows a wrapped method handle to be re-associated with an arbitrary member name. */
! private static final class WrappedMember extends DelegatingMethodHandle {
private final MethodHandle target;
private final MemberName member;
private final Class<?> callerClass;
private final boolean isInvokeSpecial;
private WrappedMember(MethodHandle target, MethodType type,
MemberName member, boolean isInvokeSpecial,
Class<?> callerClass) {
! super(type, target);
this.target = target;
this.member = member;
this.callerClass = callerClass;
this.isInvokeSpecial = isInvokeSpecial;
}
@Override
MemberName internalMemberName() {
return member;
}
@Override
Class<?> internalCallerClass() {
*** 1008,1021 ****
}
@Override
boolean isInvokeSpecial() {
return isInvokeSpecial;
}
-
@Override
! MethodHandle copyWith(MethodType mt, LambdaForm lf) {
! throw newIllegalArgumentException("do not use this");
}
}
static MethodHandle makeWrappedMember(MethodHandle target, MemberName member, boolean isInvokeSpecial) {
if (member.equals(target.internalMemberName()) && isInvokeSpecial == target.isInvokeSpecial())
--- 978,996 ----
}
@Override
boolean isInvokeSpecial() {
return isInvokeSpecial;
}
@Override
! protected MethodHandle getTarget() {
! return target;
! }
! @Override
! public MethodHandle asTypeUncached(MethodType newType) {
! // This MH is an alias for target, except for the MemberName
! // Drop the MemberName if there is any conversion.
! return asTypeCache = target.asType(newType);
}
}
static MethodHandle makeWrappedMember(MethodHandle target, MemberName member, boolean isInvokeSpecial) {
if (member.equals(target.internalMemberName()) && isInvokeSpecial == target.isInvokeSpecial())
src/share/classes/java/lang/invoke/MethodHandleImpl.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File