RFR: Lambda: 8028438: Static superclass masking default method
Coleen Phillimore
coleen.phillimore at oracle.com
Mon Dec 2 16:47:34 PST 2013
Hi Karen,
Instead of this:
Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature);
+ while (mo != NULL && mo->access_flags().is_static()
+ && mo->method_holder() != NULL
+ && mo->method_holder()->super() != NULL)
+ {
+ mo = mo->method_holder()->super()->uncached_lookup_method(name, signature);
+ }
Instead can you add a version of uncached_lookup_method that doesn't
return a static method? I think it would make
LinkResolver::lookup_instance_method_in_klasses() be cleaner too. And
eliminate my confusion in n-1 review.
I think without this change, you would add itable entries for static
methods in java.lang.Object like registerNatives and now you don't. I
don't think that's a bad thing and can't think of a way for it to cause
an incompatibility.
thanks,
Coleen
On 12/01/2013 12:33 PM, Karen Kinnear wrote:
> Please review:
>
> webrev: http://cr.openjdk.java.net/~acorn/8028438/webrev/
> bug: https://bugs.openjdk.java.net/browse/JDK-8028438
>
> Summary: default method resolution needs to follow selection rules in which static methods
> are skipped, so they don't mask default methods.
>
> Tests run:
> Test in bug report - which was added to the defmeth tests - separate review
> jck.lang, jck.vm
> jtreg java.util, java.lang, lambda
> jtreg langtools/test/lambdaShapes/.../test/vm
> 2009 invoke* tests
> hotspot jtreg: runtime, compiler
> nsk vm.quick, vm.mlvm
>
> thanks,
> Karen
More information about the hotspot-runtime-dev
mailing list