One thing I didn't see in the spec: the access check on classes.  For example, given:

    class C {
        private class D {
            private int x;
        }
    }

D.x is accessible to C because (class check) D and C are in the same package, and (member check) D and C are in the same nest.

We erase the "private" modifier when we write out the classfile for D.  But, with nestmates, we shouldn't have to do that; we should be able to mark D as ACC_PRIVATE, and amend 5.4.4 to have a fourth bullet for "class or interface C is accessible to a class or interface D" section, which says "members of the same nest."

This should affect all access to D members, and also affect "C implements C.D", where C.D is private, scenarios.

On 10/6/2017 2:00 PM, Dan Smith wrote:
I've posted an update to the nestmates spec based on discussions of the last 
few months.

http://cr.openjdk.java.net/~dlsmith/nestmates.html

Significant changes:
- Renamed MemberOfNest --> NestHost, per some requests; it seems more 
consistent with names of other attributes
- Eliminated checking of the NestHost attribute during verification. This means 
the nest of a class is computed lazily when access is requested, and we have to 
account for live classes whose NestHost attribute is invalid

I considered and rejected a proposal to guard 'invokeinterface' behavior 
changes on the class file version number. Consensus was that behavioral changes 
that replace errors with successful execution are acceptable when running old 
class files.

Feedback is always welcome.

—Dan

Reply via email to