Review request for 8021368: Launch of Java Web Start app fails with ClassCircularityError exception

Joel Borggren-Franck joel.franck at oracle.com
Mon Dec 16 09:53:45 UTC 2013


Hi Mandy,

Looks good.

cheers
/Joel

On 2013-12-14, Mandy Chung wrote:
> Hi Peter,
> 
> Thanks for the review.   This code path is critical in this core
> reflection implementation and I want to resolve this bug with a low
> risk fix in an update release and thus the proposed fix.   Thanks
> for the experiment with MethodHandles and finding out the
> pecularity.   As a side note, I really look forward to the
> reflective method call being reimplemented with method handles
> (great to see your prototype).
> 
> I have incorporated Alan's and your comment.   Updated webrev:
> http://cr.openjdk.java.net/~mchung/jdk7u/webrevs/8021368/webrev.01/
> 
> Mandy
> 
> On 12/14/2013 6:09 AM, Peter Levart wrote:
> >
> >Hi Mandy,
> >
> >I tried the following:
> >
> >
> >public class Test {
> >
> >    static class A {}
> >
> >    static class B {}
> >
> >    static class X {
> >        public void x() { }
> >    }
> >
> >    static class Y extends X {
> >        public A a(B b) { return null; }
> >        public B b(A a) { return null; }
> >        public void x() { }
> >    }
> >
> >    public static void main(String[] args) throws Exception {
> >        MethodHandles.Lookup lookup = MethodHandles.lookup();
> >        MethodHandle mh = lookup.findVirtual(Y.class, "x",
> >MethodType.methodType(void.class, new Class[0]));
> >        MethodHandleInfo mhi = lookup.revealDirect(mh);
> >        System.out.println(mhi.getDeclaringClass() == Y.class);
> >    }
> >}
> >
> >
> >The above code does not trigger loading of classes A or B. But
> >unfortunately it prints true even if I comment-out the declaration
> >of method Y.x(). I don't know if this is a bug though. I should
> >ask on the mlvm-dev list...
> >
> >Anyway, your approach seems more appropriate as it doesn't depend
> >on method handles and their peculiarities...
> >
> >Some nits:
> >
> >2241      * Finds the checkMemberAccess method of the given SecurityManager*instance*.
> >
> >
> >...I think it should read "...of the given SecurityManager*class*." instead, since the method parameter is of type Class.
> >
> >
> >2210     private static class SecurityManagerHelper {
> >2211         private final SecurityManager smgr;
> >2212         private final boolean overrideCheckMemberAccess;
> >
> >
> >...the fields could be declared package-private so that no synthetic access methods are generated...
> >
> >Regards, Peter
> >
> 



More information about the core-libs-dev mailing list