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