[lworld] RFR: 8368467: [lworld] Add new flag generation for jimage to support preview mode [v2]
Roger Riggs
rriggs at openjdk.org
Wed Nov 5 17:12:47 UTC 2025
On Wed, 5 Nov 2025 15:07:12 GMT, David Beaumont <duke at openjdk.org> 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.
>
> David Beaumont has updated the pull request incrementally with one additional commit since the last revision:
>
> Minor feedback changes
Changes requested by rriggs (Committer).
test/jdk/jdk/internal/jimage/ImageReaderTest.java line 251:
> 249:
> 250: // Preview version of classes either overwrite existing entries or are added to directories.
> 251: assertEquals("Preview: com.foo.HasPreviewVersion", loader.loadAndGetToString("modfoo", "com.foo.HasPreviewVersion"));
This test fails:
[12:00:51.621] STARTED ImageReaderTest::testPreviewResources_enabled 'testPreviewResources_enabled()'
org.opentest4j.AssertionFailedError: expected: <Preview: com.foo.HasPreviewVersion> but was: <Class: com.foo.HasPreviewVersion>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1145)
at ImageReaderTest.testPreviewResources_enabled(ImageReaderTest.java:251)
test/jdk/jdk/internal/jimage/ImageReaderTest.java line 310:
> 308: try (ImageReader reader = ImageReader.open(image, PreviewMode.ENABLED)) {
> 309: // In preview mode there is a new preview-only module visible.
> 310: assertDirContents(reader, "/packages/com.bar", "modbar", "modgus");
This test fails, not clear if its the impl or the test.
org.opentest4j.AssertionFailedError: Unexpected child names in directory '/packages/com.bar' ==> expected: <[modbar, modgus]> but was: <[modbar]>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1156)
at ImageReaderTest.assertDirContents(ImageReaderTest.java:362)
at ImageReaderTest.testPreviewModeLinks_enabled(ImageReaderTest.java:310)
-------------
PR Review: https://git.openjdk.org/valhalla/pull/1718#pullrequestreview-3423380755
PR Review Comment: https://git.openjdk.org/valhalla/pull/1718#discussion_r2495429041
PR Review Comment: https://git.openjdk.org/valhalla/pull/1718#discussion_r2495425964
More information about the valhalla-dev
mailing list