RFR: 8015831: Add lint check for calling overridable methods from a constructor [v7]
Archie L. Cobbs
duke at openjdk.org
Fri Jan 13 15:11:49 UTC 2023
On Fri, 13 Jan 2023 15:08:43 GMT, Archie L. Cobbs <duke at openjdk.org> wrote:
>> Something seems to be up with the lint description for this-escape - compare this:
>>
>>
>> serial Warn about Serializable classes that do not have a serialVersionUID field.
>> Also warn about other suspect declarations in Serializable and Externalizable classes and interfaces.
>>
>> with this:
>>
>>
>> this-escape Warn when a constructor invokes a method that could be overriden in a subclass;
>> such a method would execute before the subclass constructor completes its initialization.
>>
>>
>> Indentation seems to be missing, which causes readability issues in the `--help-lint` output.
>
>> I guess I was confused because, while subclasses are a particularly sneaky case where uninitialized values can show up, the above leak seems potentially dangerous as well...
>
> Yes - and this very question did come up in the discussions around this warning (see amber-dev).
>
> The decision was to go with drawing the "warning boundary" at the compilation unit. The reasoning is that (a) this aligns with the compiler's "knowledge boundary", i.e., we can know for sure from code inspection, and also (b) focuses the warning on the particularly pernicious aspect of these bugs, which is that they arise from the non-obvious interaction among two or more files - even when looking at any single one of those files, there doesn't seem to be any apparent problem. In other words, we decided "not to try to save any single source code from itself".
>
> But I think it's still an interesting question. Maybe experience will provide more guidance over time.
> Something seems to be up with the lint description for this-escape - compare this:
Oops, will fix - thanks.
-------------
PR: https://git.openjdk.org/jdk/pull/11874
More information about the build-dev
mailing list