I've created a proposal that defines preview features [0]. The
definition very closely matches the language used in JEP-12, but is
adapted for JavaFX in some places.

Additionally, I've created the internal helper class `PreviewFeature`
that can be used to verify that applications have opted into using
preview features at runtime.

If the system property "javafx.enablePreview" system property has not
been set, the `PreviewFeature.checkEnabled(<featureName>)` method will
throw an exception similar to the following:

    <featureName> is a preview feature of JavaFX 23.
    Preview features may be removed in a future release, or
    upgraded to permanent features of JavaFX.
    Programs can only use preview features when the following
    system property is set: -Djavafx.enablePreview=true

If the system property has been set, the method will log a one-time
warning to the error output stream, similar to the following:

    Note: This program uses the following preview feature of
          JavaFX 23: <featureName>
          Preview features may be removed in a future release,
          or upgraded to permanent features of JavaFX.
          This warning can be disabled with the following
          system property: -Djavafx.suppressPreviewBanner=true

I think that we should use the @Depcreated annotation to document API
elements of preview features, with a @deprecated javadoc tag similar
to the following:

    @deprecated This is a preview feature which may be changed
                or removed in a future release.

The specification of @Deprecated specifically mentions this usage:

"An element may be deprecated for any of several reasons, for example,
its usage is likely to lead to errors; it may be changed incompatibly
or removed in a future version; it has been superseded by a newer,
usually preferable alternative; or it is obsolete."

Finally, all preview features of a JavaFX release should be listed in
the release notes.


[0] https://github.com/openjdk/jfx/pull/1359

Reply via email to