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