[core-libs] RFR (L): 8010319: Implementation of JEP 181: Nest-Based Access Control
David Holmes
david.holmes at oracle.com
Wed Jun 20 04:56:43 UTC 2018
Some further adjustments to getNestMembers() was made. Everything
updated in place.
Thanks,
David
On 20/06/2018 9:30 AM, David Holmes wrote:
> Sorry another update is imminent ... stay tuned.
>
> David
>
> On 19/06/2018 2:41 PM, David Holmes wrote:
>> Discussions on the CSR request have led to further changes to the
>> documentation involving nests and the new nest-related method. There
>> are no semantic changes here just clearer explanations.
>>
>> Incremental webrev:
>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v7-incr/
>>
>>
>> (don't worry if you don't see a v6, it didn't really exist).
>>
>> Full webrev:
>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.full.v7/
>>
>> Specdiffs updated in place at:
>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/specs/
>>
>> Summary of changes:
>>
>> - The definition of a nest etc is moved to the class-level javadoc of
>> java.lang.Class, along with some other edits provided by Alex Buckley
>> to pave the way for future updates
>> - The nest-related methods are written in a more clear and consistent way
>>
>> Thanks,
>> David
>> -----
>>
>> On 12/06/2018 3:16 PM, David Holmes wrote:
>>> Here is one further minor update from the CSR discussions:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v5-incr/src/java.base/share/classes/java/lang/Class.java.cdiff.html
>>>
>>>
>>> Thanks,
>>> David
>>>
>>> On 25/05/2018 3:52 PM, David Holmes wrote:
>>>> Here are the further minor updates so far in response to all the
>>>> review comments.
>>>>
>>>> Incremental corelibs webrev:
>>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v3-incr/
>>>>
>>>>
>>>> Full corelibs webrev:
>>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v3/
>>>>
>>>> Change summary:
>>>>
>>>> src/java.base/share/classes/jdk/internal/reflect/Reflection.java
>>>> - remove inaccurate pseudo-assertion comment
>>>>
>>>> test/jdk/java/lang/reflect/Nestmates/SampleNest.java
>>>> - code cleanup: <> operator
>>>>
>>>> test/jdk/java/lang/reflect/Nestmates/TestReflectionAPI.java
>>>> - code cleanup: streamify duplicate removals
>>>>
>>>> test/jdk/java/lang/invoke/PrivateInterfaceCall.java
>>>> - use consistent @bug number
>>>>
>>>> Thanks,
>>>> David
>>>>
>>>> On 22/05/2018 8:15 PM, David Holmes wrote:
>>>>> Here are the updates so far in response to all the review comments.
>>>>>
>>>>> Incremental webrev:
>>>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v2-incr/
>>>>>
>>>>>
>>>>> Full webrev:
>>>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v2/
>>>>>
>>>>> Change summary:
>>>>>
>>>>> src/java.base/share/classes/java/lang/Class.java
>>>>> - getNesthost:
>>>>> - change "any error" -> "any linkage error" as runtime errors
>>>>> will propagate. [This needs ratifying by EG]
>>>>> - add clarification that primitive and array classes are not
>>>>> explicitly members of any nest and so form singleton nests
>>>>> - add clarification that all nestmates are in the same package
>>>>> - re-word @return text to exclude the "royal 'we'"
>>>>> - fix javadoc cross references
>>>>>
>>>>> ---
>>>>>
>>>>> Moved reflection API tests from
>>>>> test/hotspot/jtreg/runtime/Nestmates/reflectionAPI/ to
>>>>> test/jdk/java/lang/reflect/Nestmates/
>>>>>
>>>>> ---
>>>>>
>>>>> java/lang/reflect/Nestmates/TestReflectionAPI.java
>>>>>
>>>>> Run tests twice to show that failure reasons remain the same.
>>>>>
>>>>> ---
>>>>>
>>>>> test/jdk/jdk/lambda/vm/InterfaceAccessFlagsTest.java
>>>>>
>>>>> Disable test via annotation rather than commenting out.
>>>>>
>>>>> ---
>>>>>
>>>>> src/java.base/share/classes/jdk/internal/reflect/Reflection.java
>>>>>
>>>>> - Fix indent for nestmate access check.
>>>>> - Remove unnecessary local variable
>>>>>
>>>>> ---
>>>>>
>>>>> src/java.base/share/classes/sun/invoke/util/VerifyAccess.java
>>>>>
>>>>> - Replace myassert with proper assert
>>>>>
>>>>> ---
>>>>>
>>>>> Thanks,
>>>>> David
>>>>>
>>>>> On 15/05/2018 10:52 AM, David Holmes wrote:
>>>>>> This review is being spread across four groups: langtools,
>>>>>> core-libs, hotspot and serviceability. This is the specific review
>>>>>> thread for core-libs - webrev:
>>>>>>
>>>>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.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 core-libs-dev
mailing list