CSR :
|
|
Relates :
|
|
Relates :
|
Summary ------- We propose to finalize the module import declarations feature. There are no non-editorial change to the specifications. Problem ------- The module import declarations feature have been through two rounds of preview. The experience suggests we can make the feature final and permanent. Solution -------- The following will happen for finalization of this feature: - the preview addendums for the JLS and JVMS will be folded into the corresponding main, non-preview specifications, mostly as is. Specifications will undergo editorial changes. - javac will no longer require `--enable-preview` command line option for the use of `import module <module-name>;` and `requires transitive java.base;`. - both javac and the JDK runtime will accept `module-info` classfiles with `requires transitive java.base;`. - relevant API methods currently marked with `@PreviewFeature` will be made final and permanent by removing this annotation - the default startup script for JShell will be adjusted based on the current JShell's behavior when `--enable-preview` is specified Specification ------------- The use of `import module ...` and `requires transitive java.base;` in source code will no longer require `--enable-preview` from Java compilers. The use of the `requires transitive java.base;` directive in `module-info.class` will no longer require `--enable-preview`, at compile time and at runtime. The current copies of the JLS and JVMS drafts are attached. A specdiff showing the API changes is attached and also available for convenience here: https://cr.openjdk.org/~jlahoda/JDK-8344708/specdiff.00/overview-summary.html <h3> JShell </h3> The default startup script for JShell currently differs depending on whether the `--enable-preview` command line option is used. If the `--enable-preview` command line option is not used, the default script lists a hard-coded list of packages. If the `--enable-preview` command line option is used, the JShell's default startup script is: import module java.base; import static java.io.IO.*; This will be changed as follows: <strong>When there's no `--enable-preview` command line option and source level is greater of equal to 25:</strong> The default startup script will be: import module java.base; <strong>When there's the `--enable-preview` command line option:</strong> Until https://openjdk.org/jeps/8344699 is integrated, the default startup script will be: import module java.base; import static java.io.IO.*; When https://openjdk.org/jeps/8344699 is integrated, the default startup script will be: import module java.base; <strong>When source level is lower than 25:</strong> The default startup script will be: import java.io.*; import java.math.*; import java.net.*; import java.nio.file.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.prefs.*; import java.util.regex.*; import java.util.stream.*; Which is the current default without the `--enable-preview` command line option.
|