# HG changeset patch # User jrose # Date 1342077148 25200 # Node ID 556141c6326c2c76a8ec15bda65a7c1e6a844ddb # Parent beeb1d5ecd9e44418a105504fd211d4921800546 7087658: MethodHandles.Lookup.findVirtual is confused by interface methods that are multiply inherited Reviewed-by: twisti diff -r beeb1d5ecd9e -r 556141c6326c src/share/classes/java/lang/invoke/MemberName.java --- a/src/share/classes/java/lang/invoke/MemberName.java Thu Jul 12 00:11:35 2012 -0700 +++ b/src/share/classes/java/lang/invoke/MemberName.java Thu Jul 12 00:12:28 2012 -0700 @@ -622,8 +622,12 @@ MemberName[] buf = { m }; int n = MethodHandleNatives.getMembers(m.getDeclaringClass(), m.getName(), matchSig, matchFlags, lookupClass, 0, buf); - if (n != 1) return false; - return m.isResolved(); + if (n == 0 || !m.isResolved()) + return false; // no result + else if (n == 1 || m.clazz.isInterface()) + return true; // unique result, or multiple inheritance is OK + else + return false; // ambiguous result (can this happen?) } /** Produce a resolved version of the given member. * Super types are searched (for inherited members) if {@code searchSupers} is true.