--- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Mon Jun 25 14:36:16 2018 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java Mon Jun 25 14:39:44 2018 -0700
@@ -2452,12 +2452,18 @@
checkSymbolicClass(defc);
return mh;
}
- // Treat MethodHandle.invoke and invokeExact specially.
if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
+ // Treat MethodHandle.invoke and invokeExact specially.
mh = findVirtualForMH(member.getName(), member.getMethodType());
if (mh != null) {
return mh;
}
+ } else if (defc == VarHandle.class && refKind == REF_invokeVirtual) {
+ // Treat signature-polymorphic methods on VarHandle specially.
+ mh = findVirtualForVH(member.getName(), member.getMethodType());
+ if (mh != null) {
+ return mh;
+ }
}
MemberName resolved = resolveOrFail(refKind, member);
mh = getDirectMethodForConstant(refKind, defc, resolved);