RFR: 8291643: Consider omitting type annotations from type error diagnostics [v2]

Liam Miller-Cushon cushon at openjdk.org
Tue Jun 4 18:03:50 UTC 2024


On Wed, 6 Mar 2024 20:35:20 GMT, Liam Miller-Cushon <cushon at openjdk.org> wrote:

>> Hi,
>> 
>> Please consider this fix for [JDK-8291643](https://bugs.openjdk.org/browse/JDK-8291643), which causes javac to remove type-use annotations when formatting types in diagnostics.
>> 
>> For the example like the one in the bug, this change causes javac to emit the diagnostic like `incompatible types: List<String> cannot be converted to List<Number>` rather than `incompatible types: List<String> cannot be converted to List<@Nullable Number>`. Including the type annotations can be confusing, because they do not impact the type checking done by the compiler.
>> 
>> An alternative I considered was to remove type annotations from types for specific diagnostics, instead of doing it unconditionally in diagnostic formatting. I can revisit that if the current approach seems too broad.
>> 
>> The test update to `test/langtools/tools/javac/lambda/LambdaConv25.out` is because a `ForAll` is being formatted, and `stripMetadata()` uses a `StructuralTypeMapping` which rewrites away the `ForAll`.
>
> Liam Miller-Cushon has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
> 
>  - Use Type stripping logic added for JDK-8042981
>  - Merge branch 'master' into JDK-8291643
>  - Updates based on review thread
>    
>    * Support optionally printing types with type annotations
>    * Move handling of types in AbstractDiagnosticFormatter
>    * Make annotation removal more robust, don't rely on stripMetadata
>  - 8291643: Consider omitting type annotations from type error diagnostics

> `AbstractDiagnosticFormatter` now removes type annotations from printed types by default, and there's a `JCDiagnostic.AnnotatedType` wrapper for diagnostics that want to opt-in to printing types with annotations. This isn't currently used in the PR, but #16592 is an example of a diagnostic that wants to include type annotations.

I updated this after the merge of [JDK-8043226: Better diagnostics for non-applicable type annotations](https://bugs.openjdk.org/browse/JDK-8043226), which introduces some diagnostics that include types where the annotations should be preserved, to use the `JCDiagnostic.AnnotatedType` to preserve those annotations.

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

PR Comment: https://git.openjdk.org/jdk/pull/16578#issuecomment-2148101935


More information about the compiler-dev mailing list