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/ImageResourcesTree.java 
line 393:

> 391:                 ByteBuffer byteBuffer = ByteBuffer.allocate(8 * 
> refs.size());
> 392:                 byteBuffer.order(writer.getByteOrder());
> 393:                 ModuleReference.write(refs, byteBuffer.asIntBuffer(), 
> writer::addString);

By letting the ModuleReference helper do the writing, the calculation of 
package entry flags is completely hidden so nothing can be confused with image 
location flags.

test/jdk/jdk/internal/jimage/ImageLocationTest.java line 1:

> 1: /*

Probably more ImageLocation tests could be written for existing functionality, 
but that something someone could add later. At least the preview flag stuff is 
tested now.

test/jdk/jdk/internal/jimage/ImageReaderTest.java line 1:

> 1: /*

Now we've got the code to do the jimage writing, we can add tests for the 
preview flags.

-------------

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1718#discussion_r2491391198
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1718#discussion_r2491405512
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1718#discussion_r2491397325

Reply via email to