On Mon, 21 Jul 2025 00:32:24 GMT, simon <d...@openjdk.org> wrote: >> src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileVersionImpl.java >> line 54: >> >>> 52: public Optional<ClassFileFormatVersion> formatVersion() { >>> 53: try { >>> 54: return >>> Optional.of(ClassFileFormatVersion.fromMajor(majorVersion)); >> >> You should check the minor version to be 0 for major versions 54 and later. > > Do you mean something like this? > > > @Override > public Optional<ClassFileFormatVersion> formatVersion() { > if (majorVersion < 54 || minorVersion != 0) { > return Optional.empty(); > } > try { > return > Optional.of(ClassFileFormatVersion.fromMajor(majorVersion)); > } catch (IllegalArgumentException e) { > return Optional.empty(); > } > }
No, this logic is wrong. It's more like the check in https://github.com/openjdk/jdk/blob/441dbde2c3c915ffd916e39a5b4a91df5620d7f3/src/java.base/share/classes/jdk/internal/misc/VM.java#L174-L180 public Optional<ClassFileFormatVersion> formatVersion() { if (majorVersion < ClassFile.JAVA_1_VERSION || majorVersion > ClassFile.latestMajorVersion()) return Optional.empty(); // for major version is between 45 and 55 inclusive, the minor version may be any value if (majorVersion >= ClassFile.JAVA_12_VERSION && minorVersion != 0) return Optional.empty(); // otherwise, only minor version 0 is a defined, persistent format return Optional.of(ClassFileFormatVersion.fromMajor(majorVersion)); } ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26406#discussion_r2218095625