Nestmates: JEP 181 CSR request is ready for review

David Holmes david.holmes at oracle.com
Thu Mar 8 07:28:57 UTC 2018


Hi Mandy,

On 8/03/2018 6:12 AM, mandy chung wrote:
> Hi David,
> 
> I'm reviewing the core reflection and j.l.invoke spec change.

Thanks for looking at this.

> I think Class::getNestHost and Class::getNestMembers should do a security
> permission check as performed in other method e.g. getEnclosingClass.
> 
>       * @throws SecurityException
>       *         If a security manager, <i>s</i>, is present and
>       *         the caller's class loader is not the same as or an
>       *         ancestor of the class loader for the current class and
>       *         invocation of {@link SecurityManager#checkPackageAccess
>       *         s.checkPackageAccess()} denies access to the package
>       *         of this class
>       *

That's an interesting point. Should they also be @CallerSensitive?

It may be we have to perform the SM check, but throwing 
SecurityException is somewhat contrary to the "no exceptions" approach 
of getNestHost().

I filed an issue to track this:

https://bugs.openjdk.java.net/browse/JDK-8199309

> I suggest to make @apiNote in Class::getNestHost as just part of javadoc.
> It can define a section like "Nest Membership" that can be referenced

My understanding is that @apiNote et al were introduced to more clearly 
distinguish between the actual specification part of the Javadoc and 
other non-normative text. As this is non-normative then @apiNote seems 
most appropriate. I presume we can still add a tag to allow 
cross-referencing from inside Class itself.

> by Lookup class spec.  

Cross-referencing internal text fragments across distinct javadoc is 
something I thought was not done. ??

> I also have some suggested edits that you can
> consider:
> 
> http://cr.openjdk.java.net/~mchung/valhalla/webrevs/nestmates-spec/

Some of these are okay but this part:

   * The source language compiler is responsible for deciding which classes
   * and interfaces are nestmates. For example, the {@code javac} compiler

is quite significant and should not be lost. A source compiler is free 
to chose not to use the new attributes (and of course not benefit from 
the new access control rules but continue to rely on access-bridges.) So 
the user of the API has to be aware of this.

And in MethodHandles I know there is a dislike of versioning text "Since 
JDK 11 ..." (though I see this as no different to using @since!), but 
again this new behaviour may or may not be present depending on the 
version of the classfiles and the compiler used to create them, so it is 
critical to me that this is very clearly stated. I suppose this could be 
re-stated in the form:

"If the relationship between nested types is expressed directly through 
the {@code NestHost} and {@code NestMembers} attributes (see the Java 
Virtual Machine Specification, sections 4.7.28 and 4.7.29), then the 
associated {@code Lookup} object provides direct access to the lookup 
class and all of its nestmates. Otherwise, access between nested classes 
is obtained by the Java compiler creating a wrapper method to ..."

Thanks,
David

> Mandy
> 
> On 3/6/18 10:12 PM, David Holmes wrote:
>> The Nestmates CSR request:
>>
>> https://bugs.openjdk.java.net/browse/JDK-8197445
>>
>> has been prepared by Dan Smith and myself. Before Proposing this CSR 
>> request it needs to have Reviewers add themselves to it.
>>
>> (The first reviewer will need to edit the issue to enter their OpenJDK 
>> user name in the "Reviewed by" field. Subsequent reviewers can simply 
>> click on the "Reviewed by" field in the "People" section and add their 
>> user name.
>>
>> The CSR contains links to all the updated specification documents, all 
>> of which have been previously sent out for review/comment to the EG 
>> (and observers).
>>
>> Thanks,
>> David
> 


More information about the valhalla-spec-observers mailing list