From 211a67e6478ffc9dbe3b41257c51c86bef240aeb Mon Sep 17 00:00:00 2001 From: jjg Date: Wed, 17 Jul 2013 19:12:03 -0700 Subject: [PATCH] 8020313: doclint doesn't reset HTML anchors correctly Reviewed-by: mcimadamore --- .../com/sun/tools/doclint/Checker.java | 21 ++++++++++++++----- test/tools/doclint/AnchorTest2.java | 20 ++++++++++++++++++ test/tools/doclint/AnchorTest2.out | 4 ++++ test/tools/doclint/AnchorTest2a.java | 7 +++++++ 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 test/tools/doclint/AnchorTest2.java create mode 100644 test/tools/doclint/AnchorTest2.out create mode 100644 test/tools/doclint/AnchorTest2a.java diff --git a/src/share/classes/com/sun/tools/doclint/Checker.java b/src/share/classes/com/sun/tools/doclint/Checker.java index d7b18590..ece896cc 100644 --- a/src/share/classes/com/sun/tools/doclint/Checker.java +++ b/src/share/classes/com/sun/tools/doclint/Checker.java @@ -31,9 +31,11 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Deque; import java.util.EnumSet; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -45,6 +47,7 @@ import javax.lang.model.element.Name; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic.Kind; +import javax.tools.JavaFileObject; import com.sun.source.doctree.AttributeTree; import com.sun.source.doctree.AuthorTree; @@ -88,9 +91,9 @@ import static com.sun.tools.doclint.Messages.Group.*; public class Checker extends DocTreePathScanner { final Env env; - Set foundParams = new HashSet(); - Set foundThrows = new HashSet(); - Set foundAnchors = new HashSet(); + Set foundParams = new HashSet<>(); + Set foundThrows = new HashSet<>(); + Map> foundAnchors = new HashMap<>(); boolean foundInheritDoc = false; boolean foundReturn = false; @@ -129,7 +132,7 @@ public class Checker extends DocTreePathScanner { Checker(Env env) { env.getClass(); this.env = env; - tagStack = new LinkedList(); + tagStack = new LinkedList<>(); implicitHeaderLevel = env.implicitHeaderLevel; } @@ -508,7 +511,7 @@ public class Checker extends DocTreePathScanner { if (!validName.matcher(value).matches()) { env.messages.error(HTML, tree, "dc.invalid.anchor", value); } - if (!foundAnchors.add(value)) { + if (!checkAnchor(value)) { env.messages.error(HTML, tree, "dc.anchor.already.defined", value); } } @@ -551,6 +554,14 @@ public class Checker extends DocTreePathScanner { return super.visitAttribute(tree, ignore); } + private boolean checkAnchor(String name) { + JavaFileObject fo = env.currPath.getCompilationUnit().getSourceFile(); + Set set = foundAnchors.get(fo); + if (set == null) + foundAnchors.put(fo, set = new HashSet<>()); + return set.add(name); + } + // http://www.w3.org/TR/html401/types.html#type-name private static final Pattern validName = Pattern.compile("[A-Za-z][A-Za-z0-9-_:.]*"); diff --git a/test/tools/doclint/AnchorTest2.java b/test/tools/doclint/AnchorTest2.java new file mode 100644 index 00000000..7d7441fb --- /dev/null +++ b/test/tools/doclint/AnchorTest2.java @@ -0,0 +1,20 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8020313 + * @summary doclint doesn't reset HTML anchors correctly + * @build DocLintTester + * @run main DocLintTester -ref AnchorTest2.out AnchorTest2.java AnchorTest2a.java + * @run main DocLintTester -ref AnchorTest2.out AnchorTest2a.java AnchorTest2.java + */ + +/** */ +public class AnchorTest2 { + /** */ + public void a_name_AnchorTest2() { } + + /** */ + public void a_name_AnchorTest2_already_defined() { } + + /** */ + public void a_name_AnchorTest2a_defined_in_other_file() { } +} diff --git a/test/tools/doclint/AnchorTest2.out b/test/tools/doclint/AnchorTest2.out new file mode 100644 index 00000000..a9762949 --- /dev/null +++ b/test/tools/doclint/AnchorTest2.out @@ -0,0 +1,4 @@ +AnchorTest2.java:15: error: anchor already defined: AnchorTest2 + /** */ + ^ +1 error diff --git a/test/tools/doclint/AnchorTest2a.java b/test/tools/doclint/AnchorTest2a.java new file mode 100644 index 00000000..3a197138 --- /dev/null +++ b/test/tools/doclint/AnchorTest2a.java @@ -0,0 +1,7 @@ +/* /nodynamiccopyright/ */ + +/** + * + */ +public class AnchorTest2a { } + -- GitLab