From 6f1071f5ed6bd552378b2b70cd685b74e7f9e43d Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Thu, 17 Aug 2023 07:43:07 +0000 Subject: [PATCH] 8314213: DocLint should warn about unknown standard tags Reviewed-by: jjg --- .../formats/html/taglets/TagletManager.java | 2 +- .../jdk/javadoc/internal/doclint/Checker.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java index a4724f03e9d..392678be6d3 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java @@ -358,7 +358,7 @@ public class TagletManager { if (!name.isEmpty() && name.charAt(0) == '@') { name = name.substring(1); } - if (! (standardTags.contains(name) || allTaglets.containsKey(name))) { + if (! (standardTags.contains(name) || allTaglets.containsKey(name))) { // defunct, see 8314213 if (standardTagsLowercase.contains(Utils.toLowerCase(name))) { messages.warning(ch.getDocTreePath(tag), "doclet.UnknownTagLowercase", ch.getTagName(tag)); continue; diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java index 2a4b6332f60..2f5631adbc9 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java @@ -41,6 +41,8 @@ import java.util.Objects; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; @@ -1138,10 +1140,23 @@ public class Checker extends DocTreePathScanner { } private void checkUnknownTag(DocTree tree, String tagName) { + // if it were a standard tag, this method wouldn't be called: + // a standard tag is never represented by Unknown{Block,Inline}TagTree + assert tree instanceof UnknownBlockTagTree + || tree instanceof UnknownInlineTagTree; + assert !getStandardTags().contains(tagName); + // report an unknown tag only if custom tags are set, see 8314213 if (env.customTags != null && !env.customTags.contains(tagName)) env.messages.error(SYNTAX, tree, "dc.tag.unknown", tagName); } + private Set getStandardTags() { + return Stream.of(DocTree.Kind.values()) + .filter(k -> k.tagName != null) // not all DocTree represent tags + .map(k -> k.tagName) + .collect(Collectors.toUnmodifiableSet()); + } + @Override @DefinedBy(Api.COMPILER_TREE) public Void visitUses(UsesTree tree, Void ignore) { Element e = env.trees.getElement(env.currPath);