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