diff -r 80e75aa6a707 -r 1e533c1bfb01 src/share/classes/com/sun/tools/doclint/Checker.java --- 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 { 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 @@ Checker(Env env) { env.getClass(); this.env = env; - tagStack = new LinkedList(); + 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 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-_:.]*");