> This PR tightens up the logic by which javac reports lint warnings. > Currently, lint warnings are typically emitted using the following idiom: > > > if (lint.isEnabled(LintCategory.DIVZERO) { > log.warning(LintCategory.DIVZERO, pos, Warnings.DIVZERO); > } > > There are some issues with this approach: > > * logging a lint warning has to be preceded by the correct `isEnabled` check > * the check and the `log::warning` call must share the same `LintCategory` > * the selected warning key in the `Warnings` class must also make sense for > the selected `LintCategory` > > This PR addresses these issues, so that the above code is now written as > follows: > > > lint.logIfEnabled(pos, LintWarnings.DIVZERO); > > > The new idiom builds on a number of small improvements: > > * the lint category is now tracked directly in the `compiler.properties` file; > * a new `LintWarning` class is added to `JCDiagnostic` to model a warning key > that is also associated with a speicfic `LintCategory` enum constant; > * the `CompilerProperties` class has a new group of compiler keys, nested in > the new `LintWarnings` class. This class defines the `LintWarning` objects > for all the warning keys in `compiler.properties` that have a lint category > set > * A new method `Lint::logIfEnabled(Position, LintWarning)` is added - which > simplifies the logging of lint warnings in many common cases, by merging the > `isEnabled` check together with the logging. > > As bonus points, the signatures of some methods in `Check` and > `MandatoryWarningHandler` have been tightened to accept not just a `Warning`, > but a `LintWarning`. This makes it impossible, for instance, to use > `Check::warnUnchecked` with a warning that is not a true lint warning. > > Many thanks @archiecobbs for the useful discussions!
Maurizio Cimadamore has updated the pull request incrementally with one additional commit since the last revision: Add missing lint categories in compiler.properties Simplify some lambda expressions Simplify Lint::logIfEnabled by accepting a log parameter ------------- Changes: - all: https://git.openjdk.org/jdk/pull/22553/files - new: https://git.openjdk.org/jdk/pull/22553/files/9a657f23..64883bbd Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=22553&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=22553&range=00-01 Stats: 82 lines in 6 files changed: 22 ins; 10 del; 50 mod Patch: https://git.openjdk.org/jdk/pull/22553.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/22553/head:pull/22553 PR: https://git.openjdk.org/jdk/pull/22553