Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > langtools
changeset 1911:1e533c1bfb01
8020313: doclint doesn't reset HTML anchors correctly
Reviewed-by: mcimadamore
author | jjg |
---|---|
date | Wed, 17 Jul 2013 19:12:03 -0700 |
parents | 80e75aa6a707 |
children | 1476d54fdc61 |
files | src/share/classes/com/sun/tools/doclint/Checker.java test/tools/doclint/AnchorTest2.java test/tools/doclint/AnchorTest2.out test/tools/doclint/AnchorTest2a.java |
diffstat | 4 files changed, 47 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/doclint/Checker.java Wed Jul 17 18:18:45 2013 -0700 +++ b/src/share/classes/com/sun/tools/doclint/Checker.java Wed Jul 17 19:12:03 2013 -0700 @@ -31,9 +31,11 @@ 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.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 @@ public class Checker extends DocTreePathScanner<Void, Void> { final Env env; - Set<Element> foundParams = new HashSet<Element>(); - Set<TypeMirror> foundThrows = new HashSet<TypeMirror>(); - Set<String> foundAnchors = new HashSet<String>(); + Set<Element> foundParams = new HashSet<>(); + Set<TypeMirror> foundThrows = new HashSet<>(); + Map<JavaFileObject, Set<String>> foundAnchors = new HashMap<>(); boolean foundInheritDoc = false; boolean foundReturn = false; @@ -129,7 +132,7 @@ Checker(Env env) { env.getClass(); this.env = env; - tagStack = new LinkedList<TagStackItem>(); + tagStack = new LinkedList<>(); implicitHeaderLevel = env.implicitHeaderLevel; } @@ -508,7 +511,7 @@ 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 @@ return super.visitAttribute(tree, ignore); } + private boolean checkAnchor(String name) { + JavaFileObject fo = env.currPath.getCompilationUnit().getSourceFile(); + Set<String> 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-_:.]*");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/doclint/AnchorTest2.java Wed Jul 17 19:12:03 2013 -0700 @@ -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 { + /** <a name="AnchorTest2"> </a> */ + public void a_name_AnchorTest2() { } + + /** <a name="AnchorTest2"> </a> */ + public void a_name_AnchorTest2_already_defined() { } + + /** <a name="AnchorTest2a"> </a> */ + public void a_name_AnchorTest2a_defined_in_other_file() { } +}