On Wed, 16 Aug 2023 16:51:50 GMT, Pavel Rappo <pra...@openjdk.org> wrote:
> This PR is primarily informational: aside from adding a few code comments and > `assert` statements, it acts as a place to record observations on unknown > JavaDoc tag reporting mechanics. Because it's a PR, this text will be > automatically sent to the javadoc-dev mailing list and archived for future > reference. > > --- > > DocLint can be run in three modes: > > * from javac (i.e. `javac -Xdoclint`) > * from javadoc (i.e. `javadoc -Xdoclint`) > * as a standalone test tool (i.e. > `test/langtools/tools/doclint/DocLintTester.java`) > > While the core of all these modes is the same, > `jdk.javadoc.internal.doclint.DocLint`, and is capable of reporting on > unknown tags, whether an unknown tag will be reported, depends on the core > configuration, which differs significantly among these modes. > > The latter mode is for testing only and can be configured flexibly, but it's > of little interest to us. The former two modes are important as they face end > user, but are limited in their configuration and, additionally, each has own > peculiarities. > > In javac mode, DocLint cannot be passed with a list of custom tags: the > required wiring is missing. So, when a potentially unknown tag is detected, > the error is not raised because `env.customTags == null`: > > private void checkUnknownTag(DocTree tree, String tagName) { > if (env.customTags != null && !env.customTags.contains(tagName)) > ^^^^^^^^^^^^^^^^^^^^^^ > env.messages.error(SYNTAX, tree, "dc.tag.unknown", tagName); > } > > This is why we don't see errors for JDK-specific tags (e.g. `@implSpec`, > `@implNote`, `@apiNote`, `@jls`) when `make images`, during which DocLint is > run from javac. > > In javadoc mode DocLint is passed with a list of custom tags, containing tags > captured from `-tag` and `-taglet` options. Because `make docs` runs javadoc > with such options for each of the JDK-specific tags, all tags are known, and > no errors are reported. > > Here's a twist though: javadoc has its own machinery for reporting unknown > tags. So why don't we see doubling of diagnostics? There should be an error > from DocLint and a warning [sic!] from javadoc, but there's only an error. > Here's why: > > public void checkTags(Element element, Iterable<? extends DocTree> trees) > { > CommentHelper ch = utils.getCommentHelper(element); > for (DocTree tag : trees) { > String name = tag.getKind().tagName; > ^^^^^^^^^^^^^^^^^ > if (name == null) { > continue; > } > ... Filed a follow-up bug: https://bugs.openjdk.org/browse/JDK-8314448 ------------- PR Comment: https://git.openjdk.org/jdk/pull/15314#issuecomment-1680994289