Mercurial > hg > release > icedtea7-forest-2.1 > jdk
changeset 4848:90e4cb6f78bb
8006179: JSR292 MethodHandles lookup with interface using findVirtual()
Reviewed-by: twisti
author | jrose |
---|---|
date | Fri, 18 Jan 2013 20:47:51 -0800 |
parents | 0ad964f2ced1 |
children | 1040c44a496d |
files | src/share/classes/java/lang/invoke/DirectMethodHandle.java |
diffstat | 1 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/DirectMethodHandle.java Fri Mar 08 15:53:50 2013 +0000 +++ b/src/share/classes/java/lang/invoke/DirectMethodHandle.java Fri Jan 18 20:47:51 2013 -0800 @@ -44,6 +44,15 @@ if (!m.isResolved()) throw new InternalError(); + if (m.getDeclaringClass().isInterface() && !m.isAbstract()) { + // Check for corner case: invokeinterface of Object method. + MemberName m2 = new MemberName(Object.class, m.getName(), m.getMethodType(), m.getModifiers()); + m2 = MemberName.getFactory().resolveOrNull(m2, false, null); + if (m2 != null && m2.isPublic()) { + m = m2; + } + } + MethodHandleNatives.init(this, (Object) m, doDispatch, lookupClass); }