view patches/8006179-lookup_using_findvirtual.patch @ 2552:cf4897fbb9f5

Add new fixes locally (backports from u17b02 & 2.4, PR1303 fix) so as to keep with 2.1.7 forest tag. 2013-03-11 Andrew John Hughes <gnu.andrew@member.fsf.org> * Makefile.am: (ICEDTEA_PATCHES): Add patches. * NEWS: Updated. * patches/8002344-krb5loginmodule.patch, * patches/8004344-toolkiterrorhandler.patch: Backported from 2.4. * patches/8006179-lookup_using_findvirtual.patch, * patches/8006882-sun.proxy.patch: Taken from upstream jdk7u17 b02. * patches/pr1303-ifdef_fix.patch: PR1303 issue (#ifdef vs. #if) caught by Bernhard Rosenkr?nzer.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Mon, 11 Mar 2013 15:11:10 +0000
parents
children
line wrap: on
line source

# HG changeset patch
# User jrose
# Date 1358570871 28800
# Node ID 90e4cb6f78bb0551ae23f88dd75cb57aad9d8662
# Parent  0ad964f2ced1b4f12c1b30bd92dceb73ba15f608
8006179: JSR292 MethodHandles lookup with interface using findVirtual()
Reviewed-by: twisti

diff --git a/src/share/classes/java/lang/invoke/DirectMethodHandle.java b/src/share/classes/java/lang/invoke/DirectMethodHandle.java
--- openjdk/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java
+++ openjdk/jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java
@@ -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);
     }