mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-23 13:20:34 +00:00
8025246: [doclint] doclint is showing error on anchor already defined when it's not
Reviewed-by: bpatel
This commit is contained in:
parent
14ceb05e0e
commit
026c5d7620
@ -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-_:.]*");
|
||||
|
||||
|
||||
53
langtools/test/tools/doclint/anchorTests/p/Test.java
Normal file
53
langtools/test/tools/doclint/anchorTests/p/Test.java
Normal 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() { }
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
19
langtools/test/tools/doclint/anchorTests/p/Test.out
Normal file
19
langtools/test/tools/doclint/anchorTests/p/Test.out
Normal 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
|
||||
15
langtools/test/tools/doclint/anchorTests/p/package-info.java
Normal file
15
langtools/test/tools/doclint/anchorTests/p/package-info.java
Normal 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;
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
package-info.java:12:7: compiler.err.proc.messager: anchor already defined: here
|
||||
1 error
|
||||
@ -0,0 +1,4 @@
|
||||
package-info.java:12: error: anchor already defined: here
|
||||
* <a name=here>here again</a>
|
||||
^
|
||||
1 error
|
||||
Loading…
x
Reference in New Issue
Block a user