On Mon, 9 Feb 2026 21:13:04 GMT, Vicente Romero <[email protected]> wrote:

>> emit a lint warning for cases like:
>> 
>> class Test {
>>     String! m(String s) { return ""; }
>> }
>> class Sub extends Test {
>>     @Override
>>     String m(String s) { return null; }
>> }
>> 
>> or:
>> 
>> class Test {
>>     String m(String! s) { return ""; }
>> }
>> class Sub extends Test {
>>     @Override
>>     String m(String s) { return null; }
>> }
>
> Vicente Romero has updated the pull request incrementally with 20 additional 
> commits since the last revision:
> 
>  - minor change
>  - minor change
>  - removing commented code
>  - addressing review comments
>  - minor code change
>  - adding separate compilation test
>  - updating tests
>  - another update
>  - reducing common code
>  - adding support for explicit lambdas
>  - ... and 10 more: 
> https://git.openjdk.org/valhalla/compare/4c1b385b...fd10017d

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java line 1883:

> 1881:             while (mtArgs.nonEmpty() && otArgs.nonEmpty()) {
> 1882:                 if (types.hasNarrowerNullability(otArgs.head, 
> mtArgs.head)) {
> 1883:                     warnNullableTypes(TreeInfo.diagnosticPositionFor(m, 
> tree), LintWarnings.ArgumentTypeIsNullRestricted);

Not sure if we should report all parameter issues or just the first -- but it's 
ok for now

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java line 1975:

> 1973:     }
> 1974: 
> 1975:     public void checkArgsNullability(List<Type> overridingArgs,

One possibility to simplify this w/o passing a lot lambdas could be to just 
have a method that returns a Pair of incompatible types -- then the client will 
do what it want with it; or `null` if there's no incompatibility

src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
 line 4395:

> 4393: # lint: null
> 4394: compiler.warn.return.type.is.null.restricted=\
> 4395:     Overriden method''s return type is null restricted

These message seems confusing. The problem is not that the overridden method is 
null-restricted, but rather, that there's a mismatch AND the overridden method 
is null-restricted while the overriding method is not.

I suggest something like: "incompatible null restrictions in overriding method" 
-- maybe followed by a details message (e.g. "return type Foo in the overriding 
does not match the return type Foo! in the overridden method")

src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
 line 4401:

> 4399: # 0: type, 1: type
> 4400: compiler.misc.return.type.nullability.mismatch=\
> 4401:     return type {0} in the overriding does not match the return type 
> {1}! in the overridden method

You shouldn't need the `!` here -- if the type has restrictions, they should be 
displayed

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2058#discussion_r2775132136
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2058#discussion_r2783447623
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2058#discussion_r2775163272
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2058#discussion_r2783473145

Reply via email to