[core-libs] RFR (L): 8010319: Implementation of JEP 181: Nest-Based Access Control
David Holmes
david.holmes at oracle.com
Tue Jun 19 23:30:23 UTC 2018
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