[langtools] RFR (L): 8010319: Implementation of JEP 181: Nest-Based Access Control

David Holmes david.holmes at oracle.com
Tue May 15 08:33:46 UTC 2018


Thanks Remi!

David

On 15/05/2018 6:13 PM, Remi Forax wrote:
> ----- Mail original -----
>> De: "Maurizio Cimadamore" <maurizio.cimadamore at oracle.com>
>> À: "David Holmes" <david.holmes at oracle.com>, "compiler-dev" <compiler-dev at openjdk.java.net>
>> Envoyé: Mardi 15 Mai 2018 09:59:43
>> Objet: Re: [langtools] RFR (L): 8010319: Implementation of JEP 181: Nest-Based Access Control
> 
>> Hi David,
>> the webrev looks good.
>>
>> You did an excellent job in staying on top of all these different areas
>> - kudos!
> 
> yes !
> 
>>
>> The only thing I can't decide is whether we will need an escape hatch
>> flag for when you compile using -target 11 and, for some weird reason
>> you need to disable nestmates (e.g. you want javac to emit accessors).
>> But with all the testing you did, I'm confident that what we have is
>> good - we can always add such a flag at a later stage - it's so trivial.
> 
> I agree with this strategy. Given that we are aligning the VM class semantics to the Java the language semantics, i do not think people will still want accessors, perhaps in a nightmare, 'i still want accessors otherwise the stacktraces are too easy to read', in 5 when ldc class was intoduced, nobody ask to keep the class accessor code.
> 
>>
>> Cheers
>> Maurizio
> 
> regards,
> Rémi
> 
>>
>>
>> On 15/05/18 01:52, David Holmes wrote:
>>> This review is being spread across four groups: langtools, core-libs,
>>> hotspot and serviceability. This is the specific review thread for
>>> langtools - webrev:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.langtools.v1/
>>>
>>> See below for full details - including annotated full webrev guiding
>>> the review.
>>>
>>> The intent is to have JEP-181 targeted and integrated by the end of
>>> this month.
>>>
>>> Thanks,
>>> David
>>> -----
>>>
>>> The nestmates project (JEP-181) introduces new classfile attributes to
>>> identify classes and interfaces in the same nest, so that the VM can
>>> perform access control based on those attributes and so allow direct
>>> private access between nestmates without requiring javac to generate
>>> synthetic accessor methods. These access control changes also extend
>>> to core reflection and the MethodHandle.Lookup contexts.
>>>
>>> Direct private calls between nestmates requires a more general calling
>>> context than is permitted by invokespecial, and so the JVMS is updated
>>> to allow, and javac updated to use, invokevirtual and invokeinterface
>>> for private class and interface method calls respectively. These
>>> changed semantics also extend to MethodHandle findXXX operations.
>>>
>>> At this time we are only concerned with static nest definitions, which
>>> map to a top-level class/interface as the nest-host and all its nested
>>> types as nest-members.
>>>
>>> Please see the JEP for further details.
>>>
>>> JEP: https://bugs.openjdk.java.net/browse/JDK-8046171
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8010319
>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8197445
>>>
>>> All of the specification changes have been previously been worked out
>>> by the Valhalla Project Expert Group, and the implementation reviewed
>>> by the various contributors and discussed on the valhalla-dev mailing
>>> list.
>>>
>>> Acknowledgments and contributions: Alex Buckley, Maurizio Cimadamore,
>>> Mandy Chung, Tobias Hartmann, Vladimir Ivanov, Karen Kinnear, Vladimir
>>> Kozlov, John Rose, Dan Smith, Serguei Spitsyn, Kumar Srinivasan
>>>
>>> Master webrev of all changes:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.full.v1/
>>>
>>> Annotated master webrev index:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/jep181-webrev.html
>>>
>>> Performance: this is expected to be performance neutral in a general
>>> sense. Benchmarking and performance runs are about to start.
>>>
>>> Testing Discussion:
>>> ------------------
>>>
>>> The testing for nestmates can be broken into four main groups:
>>>
>>> -  New tests specifically related to nestmates and currently in the
>>> runtime/Nestmates directory
>>>
>>> - New tests to complement existing tests by adding in testcases not
>>> previously expressible.
>>>    -  For example java/lang/invoke/SpecialInterfaceCall.java tests use
>>> of invokespecial for private interface methods and performing receiver
>>> typechecks, so we add java/lang/invoke/PrivateInterfaceCall.java to do
>>> similar tests for invokeinterface.
>>>
>>> -  New JVM TI tests to verify the spec changes related to nest
>>> attributes.
>>>
>>> -  Existing tests significantly affected by the nestmates changes,
>>> primarily:
>>>     -  runtime/SelectionResolution
>>>
>>>     In most cases the nestmate changes makes certain invocations that
>>> were illegal, legal (e.g. not requiring invokespecial to invoke
>>> private interface methods; allowing access to private members via
>>> reflection/Methodhandles that were previously not allowed).
>>>
>>> - Existing tests incidentally affected by the nestmate changes
>>>
>>>    This includes tests of things utilising class
>>> redefinition/retransformation to alter nested types but which
>>> unintentionally alter nest relationships (which is not permitted).
>>>
>>> There are still a number of tests problem-listed with issues filed
>>> against them to have them adapted to work with nestmates. Some of
>>> these are intended to be addressed in the short-term, while some (such
>>> as the runtime/SelectionResolution test changes) may not eventuate.
>>>
>>> - https://bugs.openjdk.java.net/browse/JDK-8203033
>>> - https://bugs.openjdk.java.net/browse/JDK-8199450
>>> - https://bugs.openjdk.java.net/browse/JDK-8196855
>>> - https://bugs.openjdk.java.net/browse/JDK-8194857
>>> - https://bugs.openjdk.java.net/browse/JDK-8187655
>>>
>>> There is also further test work still to be completed (the JNI and JDI
>>> invocation tests):
>>> - https://bugs.openjdk.java.net/browse/JDK-8191117
>>> which will continue in parallel with the main RFR.
>>>
>>> Pre-integration Testing:
>>>   - General:
>>>      - Mach5: hs/jdk tier1,2
>>>      - Mach5: hs-nightly (tiers 1 -3)
>>>   - Targetted
>>>     - nashorn (for asm changes)
>>>     - hotspot: runtime/*
>>>                serviceability/*
>>>                compiler/*
>>>                vmTestbase/*
>>>     - jdk: java/lang/invoke/*
>>>            java/lang/reflect/*
>>>            java/lang/instrument/*
>>>            java/lang/Class/*
>>>            java/lang/management/*
>>>    - langtools: tools/javac
>>>                 tools/javap


More information about the compiler-dev mailing list