[PATCH] 8188240: Reflection Proxy should skip static methods

David Lloyd david.lloyd at redhat.com
Tue Mar 13 23:06:01 UTC 2018


I worked up a little patch for 8188240.  I was able to co-opt an
existing test which now fails before the patch and passes after.  It's
a tiny patch so I'm including it inline.  I've CC'd Mandy because she
filed the original bug.

Here's the patch (use patch -p1 to apply):

-------- cut ------- 8< ------- cut --------
diff --git a/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java
b/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java
index cc8dbbfffab..465a5b938e3 100644
--- a/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java
+++ b/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java
@@ -449,7 +449,9 @@ class ProxyGenerator {
          */
         for (Class<?> intf : interfaces) {
             for (Method m : intf.getMethods()) {
-                addProxyMethod(m, intf);
+                if (! Modifier.isStatic(m.getModifiers())) {
+                    addProxyMethod(m, intf);
+                }
             }
         }

diff --git a/test/jdk/java/lang/reflect/Proxy/Basic1.java
b/test/jdk/java/lang/reflect/Proxy/Basic1.java
index b2440ccd9f9..4a21470b1be 100644
--- a/test/jdk/java/lang/reflect/Proxy/Basic1.java
+++ b/test/jdk/java/lang/reflect/Proxy/Basic1.java
@@ -36,6 +36,10 @@ import java.util.*;

 public class Basic1 {

+    public interface ClashWithRunnable {
+        static int run() { return 123; }
+    }
+
     public static void main(String[] args) {

         System.err.println(
@@ -43,7 +47,7 @@ public class Basic1 {

         try {
             Class<?>[] interfaces =
-                new Class<?>[] { Runnable.class, Observer.class };
+                new Class<?>[] { ClashWithRunnable.class,
Runnable.class, Observer.class };

             ClassLoader loader = ClassLoader.getSystemClassLoader();

-------- cut ------- 8< ------- cut --------

-- 
- DML


More information about the core-libs-dev mailing list