On Mon, 23 Feb 2026 14:36:15 GMT, David Beaumont <[email protected]> wrote:

>> test/jdk/jdk/internal/jrtfs/ClassResourcesParityTest.java line 74:
>> 
>>> 72:             String relPath = jrtClassFile.subpath(2, 
>>> jrtClassFile.getNameCount()).toString();
>>> 73:             String fqn = relPath.substring(0, relPath.length() - 
>>> CLASS_SUFFIX.length()).replace('/', '.');
>>> 74:             String baseName = fqn.substring(fqn.lastIndexOf('.') + 1);
>> 
>> This is fine, just FYI that JAVA_BASE.relativize(jrtClassFile) is another 
>> slicker way to get the relative path from /module/java.base to the resource.
>
> Hmm, good point. However I don't have the `/modules/<name>` path to hand 
> here, so I still need to subpath() something. So it's
> 
> jrtClassFile.subpath(0, 2).relativize(jrtClassFile).toString();
> 
> vs
>             
> jrtClassFile.subpath(2, jrtClassFile.getNameCount()).toString();
> 
> Marginal win for readability.

Actually, that caused an exception:

            Path modRoot = jrtClassFile.subpath(0, 2);
            String relPath = modRoot.relativize(jrtClassFile).toString();

results in:

java.lang.IllegalArgumentException: Incorrect filesystem or path: 
/modules/java.base/com/sun/crypto/provider/AEADBufferedStream.class
        at java.base/jdk.internal.jrtfs.JrtPath.relativize(JrtPath.java:223)
        at java.base/jdk.internal.jrtfs.JrtPath.relativize(JrtPath.java:59)
        at 
ClassResourcesParityTest.testMatchesGetResourceAsStream(ClassResourcesParityTest.java:73)

So I'll stick with what I've got.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2032#discussion_r2841250185

Reply via email to