On 6/4/20 9:43 AM, Chris Hegarty wrote:
Mandy,
I think this looks good. Just a few minor comments...
The spec wording is hard, since the method is offering a conditional
initialization. I guess I expected to see something like “initializes
targetClass, if it has not been initialized already”, or some such.
I added:
"This method causes {@code targetClass} to be initialized if it has
not been already initialized."
to make it clear.
The input and output is the same class instance. I don’t quite get that from the spec.
Can these be coupled together more obviously by their descriptions? Maybe "@return
targetClass, that is initialized"
@return the class that has been initialized.
I changed it to:
* @return {@code targetClass} that has been initialized
Mandy
-Chris.
On 4 Jun 2020, at 00:16, Mandy Chung <mandy.ch...@oracle.com> wrote:
This proposes a new `Lookup::ensureClassInitialized` API as a replacement
for `sun.misc.Unsafe::ensureClassInitialized`.The Lookup object must have
the access to the given class being initialized.
CSR: https://bugs.openjdk.java.net/browse/JDK-8245871
webrev:
http://cr.openjdk.java.net/~mchung/jdk15/webrevs/8235521/webrev.01/
This patch converts the JDK use of
`jdk.internal.misc.Unsafe::ensureClassInitialized` to
call this new API where appropriate. `Unsafe::ensureClassInitialized` remains
for java.lang.invoke.* internal implementation use.
A framework can use `Lookup::privateLookupIn` to access a class in another
module if the module authorizes it by opening the packages for it to access. Or
a user can produce a less privileged lookup by Lookup::dropLookupMode and pass
it to the framework.
`Class::ensureInitialized` was considered as an alternative. The downside for
this option is that it would be caller sensitive in order to ensure the caller
has the proper access to this class. And it may not work for frameworks which
have no access to user classes. It would have to fallback toClass::forName`
limited solution.
Thanks
Mandy