On Tue, 4 Nov 2025 17:08:45 GMT, David Beaumont <[email protected]> wrote:
> Adds support for writing preview related flags into jimage files.
>
> Preview mode is complex. It's not nearly as simple as "does something in
> /modules/xxx/... have an entry in /modules/xxx/META-INF/preview/...".
>
> Specific issues include:
>
> Supporting preview-only resources without forcing a double lookup on
> everything.
> Changing the set of entries in /packages/xxx directories to account for
> preview only packages in some modules.
> Minimising the work done during image reader initialization to only need to
> process the small number of preview resources (rather than scanning the whole
> file to look for them).
> The new flags added by this code address these issues, but calculating them
> correctly with only minor adjustments to the existing code was not feasible,
> it just became a lot larger and very complex.
>
> To address this, a new type (ModuleReference) is introduced to track and then
> merge information about packages seen in each module. This allows a much
> simpler inner loop for processing resource paths when building the node tree,
> combined with a subsequent merging stage to produce the final package
> information for each module.
>
> Not that since ModuleReference is needed during jimage reading, that class is
> already present in the previous PR on which this is based, but it starts to
> be used to calculate the module flags in this PR.
>
> This PR can also adds the ImageReader unit tests for preview mode, which rely
> on being able to generate jimage files with preview mode flags in.
src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java line
230:
> 228: boolean generateRuntimeImage
> 229: ) throws IOException {
> 230: ResourcePool resultResources;
Pulling this into a helper means that resultResources is effectively final and
usable in the lambda.
src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageLocationWriter.java
line 93:
> 91:
> 92: return new ImageLocationWriter(strings)
> 93: .addAttribute(ATTRIBUTE_MODULE, moduleName)
Original has bad indentation.
-------------
PR Review Comment:
https://git.openjdk.org/valhalla/pull/1718#discussion_r2491372924
PR Review Comment:
https://git.openjdk.org/valhalla/pull/1718#discussion_r2491374736