JEP draft: Prepare to Restrict The Use of JNI

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Aug 24 12:16:34 UTC 2023


Hi Volker.

On 24/08/2023 13:05, Volker Simonis wrote:
> I think it is a little unfortunate that the specification of
> "Restricted Methods" is buried in the documentation of the
> java.lang.foreign package [1] which is "only" a preview feature. Apart
> from there it is mentioned neither in the Java Language Specification
> nor in the JVM specification (as far as I can see).
There is no change to the Java language, nor any change to the JVM 
behavior. This is why restricted methods aren't (and shouldn't) covered 
there.
>
> If "Restricted Methods" will be used more broadly and enforced by the
> SE specification it think it makes sense to introduce a new,
> @Documented annotation (e.g. @Restricted) to make the restricted
> nature of specific methods more explicit. This would also make it
> possible for tools like compilers/IDEs to flag this methods at
> development/build time (similar to @Deprecated). Just mentioning that
> a method is restricted somewhere down in their API documentation ( see
> e.g. java.lang.foreign.Linker.nativeLinker()) doesn't seem to reflect
> the impact of this attribute.

I agree, this is something we have considered. Unfortunately there is 
the usual dilemma here: if the annotation is public, then you can add it 
to your 3rd party methods, which is a moral hazard (after all, 
restricted methods are a JDK concept).

That said, an internal annotation like `@PreviewFeature` could be enough 
to provide javac support along the lines you describe.

As to the fact that restricted methods are for now described in the 
java.lang.foreign package, I agree it's a bit suboptimal (especially 
moving forward) - even though, for now, you only really care about 
restricted methods if you use the FFM API, really.

Once restricted methods start to show up elsewhere, we could perhaps 
pull up the definition of restricted methods in a separate page, 
similarly to what was done for value based:

https://download.java.net/java/early_access/jdk21/docs/api/java.base/java/lang/doc-files/ValueBased.html

And link to that same page across the JDK API, rather than have the 
section embedded in the java.lang.foreign package description.

Maurizio





More information about the jdk-dev mailing list