src/java.base/share/classes/java/lang/invoke/MethodHandles.java
changeset 50771 9ca95539747d
parent 50735 2f2af62dfac7
child 50927 d99e206cc32e
--- 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);