RFR: 8368333: [lworld] Add preview mode to ImageReader and JRT file-system [v3]

David Beaumont duke at openjdk.org
Wed Oct 8 17:15:53 UTC 2025


On Wed, 8 Oct 2025 15:29:37 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> Ah, but HAS_PREVIEW_VERSION is never set on a preview location. It's only for non-preview locations to indicate that a (different) preview version exists.
>> 
>> HAS_PREVIEW_VERSION can also be set for /packages/xxx directory entries (where it means "some of the entries are modules in which preview versions of resources exist" rather than "there's a META-INF/preview version of this entry"). IS_PREVIEW_VERSION is kind of meaningless for the /packages/xxx directories though, and is never set on them.
>> 
>> I'm not sure I'm a fan of trying to merge the semantics of these into some sort of "HAS_OR_IS_PREVIEW_VERSION" flag though. We're not short on flag space (and are extremely unlikely to ever be).
>
> I see the semantics of the flag as `there-is-a-preview-version` of the resource.
> Where-ever it appears, it means that the resource/class is in the preview branch of the hierarchy.
> If the flag appears in the normal hierarchy index, it still means the same, look in the preview hierarchy.
> If it appears on a directory, it means there preview resources in/below.

There is no "*the* resource/class" in the jimage file, because both can be present. It depends on whether the path to the entry contains META-INF/preview or not. So where a normal resource has a preview version, the same flag would be set on both.

For example, I don't see how this works if the flags have the same value.


    // Regardless of preview mode, don't return resources requested directly
    // via their preview path.
    if ((flags & ImageLocation::FLAGS_IS_PREVIEW_VERSION) != 0) {
        return 0L;
    }
    // Even if there is a preview version, we might not want to return it.
    if (!is_preview_mode || (flags & ImageLocation::FLAGS_HAS_PREVIEW_VERSION) == 0) {
        return locOffset;
    }

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/1619#discussion_r2414524082


More information about the valhalla-dev mailing list