8025246: [doclint] doclint is showing error on anchor already defined when it's not

Reviewed-by: bpatel
This commit is contained in:
Jonathan Gibbons 2013-09-24 10:51:28 -07:00
parent 14ceb05e0e
commit 026c5d7620
7 changed files with 121 additions and 4 deletions

View File

@ -93,7 +93,7 @@ public class Checker extends DocTreePathScanner<Void, Void> {
Set<Element> foundParams = new HashSet<>();
Set<TypeMirror> foundThrows = new HashSet<>();
Map<JavaFileObject, Set<String>> foundAnchors = new HashMap<>();
Map<Element, Set<String>> foundAnchors = new HashMap<>();
boolean foundInheritDoc = false;
boolean foundReturn = false;
@ -576,13 +576,30 @@ public class Checker extends DocTreePathScanner<Void, Void> {
}
private boolean checkAnchor(String name) {
JavaFileObject fo = env.currPath.getCompilationUnit().getSourceFile();
Set<String> set = foundAnchors.get(fo);
Element e = getEnclosingPackageOrClass(env.currElement);
if (e == null)
return true;
Set<String> set = foundAnchors.get(e);
if (set == null)
foundAnchors.put(fo, set = new HashSet<>());
foundAnchors.put(e, set = new HashSet<>());
return set.add(name);
}
private Element getEnclosingPackageOrClass(Element e) {
while (e != null) {
switch (e.getKind()) {
case CLASS:
case ENUM:
case INTERFACE:
case PACKAGE:
return e;
default:
e = e.getEnclosingElement();
}
}
return e;
}
// http://www.w3.org/TR/html401/types.html#type-name
private static final Pattern validName = Pattern.compile("[A-Za-z][A-Za-z0-9-_:.]*");

View File

@ -0,0 +1,53 @@
/* @test /nodynamiccopyright/
* @bug 8025246
* @summary doclint is showing error on anchor already defined when it's not
* @library ../..
* @build DocLintTester
* @run main DocLintTester -ref Test.out Test.java
* @compile/fail/ref=Test.javac.out -XDrawDiagnostics -Werror -Xdoclint:all Test.java
*/
package p;
/**
* <a name="dupTest">dupTest</a>
* <a name="dupTest">dupTest again</a>
*
* <a name="dupTestField">dupTestField</a>
* <a name="dupTestMethod">dupTestMethod</a>
* <a name="okClass">okClass</a>
* <a name="okField">okField</a>
* <a name="okMethod">okMethod</a>
*/
public class Test {
/** <a name="dupTestField">dupTestField again</a> */
public int f;
/** <a name="dupTestMethod">dupTestMethod again</a> */
public void m() { }
/**
* <a name="dupNested">dupNested</a>
* <a name="dupNested">dupNested again</a>
* <a name="dupNestedField">dupNestedField</a>
* <a name="dupNestedMethod">dupNestedMethod</a>
*
* <a name="okClass">okClass again</a>
*/
public class Nested {
/**
* <a name="dupNestedField">dupNestedField</a>
*
* <a name="okField">okField again</a>
*/
public int f;
/**
* <a name="dupNestedMethod">dupNestedMethod</a>
*
* <a name="okMethod">okMethod again</a>
*/
public void m() { }
}
}

View File

@ -0,0 +1,7 @@
Test.java:14:7: compiler.err.proc.messager: anchor already defined: dupTest
Test.java:24:12: compiler.err.proc.messager: anchor already defined: dupTestField
Test.java:27:12: compiler.err.proc.messager: anchor already defined: dupTestMethod
Test.java:32:11: compiler.err.proc.messager: anchor already defined: dupNested
Test.java:40:15: compiler.err.proc.messager: anchor already defined: dupNestedField
Test.java:47:15: compiler.err.proc.messager: anchor already defined: dupNestedMethod
6 errors

View File

@ -0,0 +1,19 @@
Test.java:14: error: anchor already defined: dupTest
* <a name="dupTest">dupTest again</a>
^
Test.java:24: error: anchor already defined: dupTestField
/** <a name="dupTestField">dupTestField again</a> */
^
Test.java:27: error: anchor already defined: dupTestMethod
/** <a name="dupTestMethod">dupTestMethod again</a> */
^
Test.java:32: error: anchor already defined: dupNested
* <a name="dupNested">dupNested again</a>
^
Test.java:40: error: anchor already defined: dupNestedField
* <a name="dupNestedField">dupNestedField</a>
^
Test.java:47: error: anchor already defined: dupNestedMethod
* <a name="dupNestedMethod">dupNestedMethod</a>
^
6 errors

View File

@ -0,0 +1,15 @@
/* @test /nodynamiccopyright/
* @bug 8025246
* @summary doclint is showing error on anchor already defined when it's not
* @library ../..
* @build DocLintTester
* @run main DocLintTester -ref package-info.out package-info.java
* @compile/fail/ref=package-info.javac.out -XDrawDiagnostics -Werror -Xdoclint:all package-info.java
*/
/**
* <a name=here>here</a>
* <a name=here>here again</a>
*/
package p;

View File

@ -0,0 +1,2 @@
package-info.java:12:7: compiler.err.proc.messager: anchor already defined: here
1 error

View File

@ -0,0 +1,4 @@
package-info.java:12: error: anchor already defined: here
* <a name=here>here again</a>
^
1 error