RFR: 8354090: Refactor import warning suppression in Check.java

Archie Cobbs acobbs at openjdk.org
Wed Apr 9 01:29:33 UTC 2025


On Wed, 9 Apr 2025 01:20:50 GMT, Archie Cobbs <acobbs at openjdk.org> wrote:

> This is split off as a sub-task of [JDK-8224228](https://bugs.openjdk.org/browse/JDK-8224228), which seeks to add `@SuppressWarnings` support for lexical features.
> 
> In JDK 9 and later, there is a special exception to the normal rules for deprecation and preview warnings, which is that these warnings are automatically suppressed for import statements. This is because an import statement is just a lexical shortcut, not an actual use of the symbol.
> 
> The current code in `Check.java` implements this by manipulating the current `Lint` instance directly, but this operation is incompatible upcoming changes to deferred lint handling. Instead, there can be an explicit flag for "import warning suppression" in `Check.java` to handle this. This will also make the code a bit clearer.

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

> 3824:             sIsPreview = false;
> 3825:             previewSymbol = null;
> 3826:         }

We don't defer here because we want `warnPreviewAPI()` to use the current value of `importSuppression`, not some later value. But these warnings didn't really need to be deferred in the first place - because we can just use the current `Lint` instance, and in fact, that's what it was already doing. But a side effect of these changes is that the warnings checked in the `PreviewAutoSuppress.java` regression test get reordered.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24532#discussion_r2034296045


More information about the compiler-dev mailing list