JDK 16 RFR of JDK-8071961: Add javac lint warning when a default constructor is created
Jonathan Gibbons
jonathan.gibbons at oracle.com
Thu Jul 30 03:16:56 UTC 2020
On 7/29/20 6:45 PM, Joe Darcy wrote:
> Hello,
>
> On 7/29/2020 5:15 PM, Alex Buckley wrote:
>> On 7/29/2020 1:10 PM, Joe Darcy wrote:
>>> Please review the code changes and CSR for
>>>
>>> JDK-8071961: Add javac lint warning when a default constructor
>>> is created
>>> webrev: http://cr.openjdk.java.net/~darcy/8071961.5/
>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8250795
>>
>> I like the idea of warning about irregular aspects of exported
>> classes, such as having an implicitly declared ("default") ctor, or
>> implementing an unexported interface. These constructs are not always
>> wrong, but they affect how code in other modules can couple to code
>> in this module, so system architects may appreciate lint warnings in
>> this area.
>>
>>> The text of the warning message implies what criteria are being used:
>>>
>>> # 0: symbol, 1: symbol, 2: symbol
>>> compiler.warn.default-ctor=\
>>> class {0} in exported package {1} of module {2} relies on a
>>> default (implicit) constructor
>>
>> Recommend "exposes" rather than "relies on". We're in the domain of
>> modules, where "relies on" / "depends on" will be taken in connection
>> with `requires`.
>
> Okay.
>
>>
>> Also, I recommend dropping "(implicit)". I believe the dominant term
>> in use is "default", and I think this is not the place for
>> parenthetical expressions that can be misinterpreted.
>
>
> Hmm. How about something like:
>
> Since it does not declare an explicit constructor, class {0} in
> exported package {1} of module {2} exposes a default constructor
>
> As with a number of terms in the JLS, "default" is used in multiple
> contexts with different meanings ("default methods" vs a "default
> constructor", etc.). The main point to convey here to the reader of
> the message is that the *absence* of something is causing the warning.
> The location the warning is reported is the start of the class
> declaration.
>
> Cheers,
>
> -Joe
>
Since there can only be one default constructor, it seems strange to use
the indefinite article, instead of the definite one.
-- Jon
More information about the compiler-dev
mailing list