Hi Mandy,

This is OK, but the whole loop could be simplified. No need for Dequeue any more:

            // set up proxy class access to proxy interfaces
            Set<Class<?>> visited = new HashSet<>(interfaces);
            for (Class<?> c : visited) {
                ensureAccess(target, c);
            }

Regards, Peter

On 04/12/2016 01:45 AM, Mandy Chung wrote:
Peter spots the redundant read edges are added to dynamic module when creating 
a proxy class.   Proxy class does not access super interfaces of proxy 
interfaces.   I have verified this simple patch with all core tests and JCK api 
tests.

diff --git a/src/java.base/share/classes/java/lang/reflect/Proxy.java 
b/src/java.base/share/classes/java/lang/reflect/Proxy.java
--- a/src/java.base/share/classes/java/lang/reflect/Proxy.java
+++ b/src/java.base/share/classes/java/lang/reflect/Proxy.java
@@ -804,11 +804,6 @@
                      continue;
                  }
                  ensureAccess(target, c);
-
-                // add all superinterfaces
-                for (Class<?> intf : c.getInterfaces()) {
-                    deque.add(intf);
-                }
              }
// set up proxy class access to types referenced in the method signature

Reply via email to