RFR (S) JDK-8026394: Eclipse fails with JDK8 build 111

Karen Kinnear karen.kinnear at oracle.com
Tue Oct 22 07:25:28 PDT 2013


Lois,

The current code is a bit sloppy in its use of terms. What I think would be clearer if we could consistently use the following terms:

Caller C.foo()                      // where C is the current class
   invokeX  A.m() O             // where A is a methodref or interfacemethodref (see constantpool terms)
                                           // where O is the objectref used for method selection

Step 1: method/interface method resolution
    1.1 lookup A in the constantpool - return what the code calls calls the resolved_klass, as in constant pool resolution
          - which also does access control checks on A from caller class C
    1.2 method/interface method resolution
          - which finds the resolved_method (and the resolved_method->method_holder)
          - which is calling this check_method_accessibility
Step 3: method selection
     3. method selection is based on the objectref
        

So for this particular code, which today is used at method/interface method resolution time:
   "If the resolved interface does not ..., the method/interface method resolution looks to the interface's super class, java.lang.Object."

thanks,
Karen

On Oct 21, 2013, at 10:15 PM, Lois Foltan wrote:

> 
> On 10/21/2013 9:43 PM, Karen Kinnear wrote:
>> Lois,
>> 
>> Fix looks good.
> Thanks for the review!
>> 
>> I'm not sure what this sentence is there for -
>> "If a direct interface of a class does not contain "clone" or "finalize" the methods would be found in the interface's super class, java.lang.Object"
>> does the "of a class" refer to the objectref for method selection?
> By "of a class" my intent was referring to the class that implements the interface that is currently being considered for method selection.  However, really the "of a class" has no bearing on this situation.  So I can understand how this is confusing.  I will reword to,
>    "If the selected interface does not itself contain "clone" or "finalize" methods,  the selection process looks to the
>      interface's super class, java.lang.Object."
> Hopefully this is better?
> 
> Thanks,
> Lois
>> 
>> Thank you for the test.
>> 
>> thanks,
>> Karen
>> 
>> On Oct 21, 2013, at 7:58 PM, Lois Foltan wrote:
>> 
>>> Please review the following fix:
>>> 
>>> Webrev:
>>>    http://cr.openjdk.java.net/~hseigel/bug_jdk8026394/
>>> 
>>> Bug: Eclipse fails with JDK8 build 111
>>>    https://bugs.openjdk.java.net/browse/JDK-8026394
>>> 
>>> Summary of fix:
>>>    If a direct interface of a class does not declare "clone" or "finalize" methods, the selection process
>>>    looks to the interface's super class, java.lang.Object.  With the JDK 8 interface accessability
>>>    check requirement, since these methods are declared within Object as protected, an IAE would
>>>    result.  In order to support pre-existing Java code, LinkResolver::check_method_accessability()
>>>    must check for and special case these two methods.
>>> 
>>> Tests:
>>>    Completed - jtreg, vm.quick.testlist, jck vm & lang
>>>    In progress - jdk java.lang & java.util
>>> 
>>> Thank you, Lois
> 



More information about the hotspot-runtime-dev mailing list