RFR: javac should not place initializers of null restricted fields before the super invocation [v4]
Vicente Romero
vromero at openjdk.org
Fri Jan 30 03:17:24 UTC 2026
On Fri, 30 Jan 2026 02:56:47 GMT, Vicente Romero <vromero at openjdk.org> wrote:
>> javac is automatically placing the initializers of null restricted fields before the super invocation. This is incorrect, null restricted fields are not strict and those initializers should be placed after the super. But javac will check that null restricted fields have been initialized before a super invocation. This implies that null restricted fields should not have initializers and users should manually initialize them in all the constructors and before explicit super invocations.
>
> Vicente Romero has updated the pull request incrementally with one additional commit since the last revision:
>
> addressing review comments
src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java line 1935:
> 1933: }
> 1934: if (sym.kind == VAR) {
> 1935: if ((flags & STRICT) != 0 || (flags & MARK_STRICT_INIT) != 0 || types.isNonNullable(sym.type)) {
non-nullable fields should have the strict flag in the class file but are different to other, strictly, strict fields. The main difference is that the compiler doesn't automatically place the initializers before the super invocation. This is why I decided to set the strict flag at the end when we are about to write the field into the class file. Setting it in Check would imply, for example, more complex tracking in Flow
-------------
PR Review Comment: https://git.openjdk.org/valhalla/pull/1990#discussion_r2744436248
More information about the valhalla-dev
mailing list