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

Tue, 24 Sep 2013 10:51:28 -0700

author
jjg
date
Tue, 24 Sep 2013 10:51:28 -0700
changeset 2052
503338f16d2b
parent 2051
96dcb66e6b0a
child 2053
6a05a713450d

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

src/share/classes/com/sun/tools/doclint/Checker.java file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/Test.java file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/Test.javac.out file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/Test.out file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/package-info.java file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/package-info.javac.out file | annotate | diff | comparison | revisions
test/tools/doclint/anchorTests/p/package-info.out file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/doclint/Checker.java	Tue Sep 24 10:48:11 2013 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/doclint/Checker.java	Tue Sep 24 10:51:28 2013 -0700
     1.3 @@ -93,7 +93,7 @@
     1.4  
     1.5      Set<Element> foundParams = new HashSet<>();
     1.6      Set<TypeMirror> foundThrows = new HashSet<>();
     1.7 -    Map<JavaFileObject, Set<String>> foundAnchors = new HashMap<>();
     1.8 +    Map<Element, Set<String>> foundAnchors = new HashMap<>();
     1.9      boolean foundInheritDoc = false;
    1.10      boolean foundReturn = false;
    1.11  
    1.12 @@ -576,13 +576,30 @@
    1.13      }
    1.14  
    1.15      private boolean checkAnchor(String name) {
    1.16 -        JavaFileObject fo = env.currPath.getCompilationUnit().getSourceFile();
    1.17 -        Set<String> set = foundAnchors.get(fo);
    1.18 +        Element e = getEnclosingPackageOrClass(env.currElement);
    1.19 +        if (e == null)
    1.20 +            return true;
    1.21 +        Set<String> set = foundAnchors.get(e);
    1.22          if (set == null)
    1.23 -            foundAnchors.put(fo, set = new HashSet<>());
    1.24 +            foundAnchors.put(e, set = new HashSet<>());
    1.25          return set.add(name);
    1.26      }
    1.27  
    1.28 +    private Element getEnclosingPackageOrClass(Element e) {
    1.29 +        while (e != null) {
    1.30 +            switch (e.getKind()) {
    1.31 +                case CLASS:
    1.32 +                case ENUM:
    1.33 +                case INTERFACE:
    1.34 +                case PACKAGE:
    1.35 +                    return e;
    1.36 +                default:
    1.37 +                    e = e.getEnclosingElement();
    1.38 +            }
    1.39 +        }
    1.40 +        return e;
    1.41 +    }
    1.42 +
    1.43      // http://www.w3.org/TR/html401/types.html#type-name
    1.44      private static final Pattern validName = Pattern.compile("[A-Za-z][A-Za-z0-9-_:.]*");
    1.45  
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/test/tools/doclint/anchorTests/p/Test.java	Tue Sep 24 10:51:28 2013 -0700
     2.3 @@ -0,0 +1,53 @@
     2.4 +/* @test /nodynamiccopyright/
     2.5 + * @bug 8025246
     2.6 + * @summary doclint is showing error on anchor already defined when it's not
     2.7 + * @library ../..
     2.8 + * @build DocLintTester
     2.9 + * @run main DocLintTester -ref Test.out Test.java
    2.10 + * @compile/fail/ref=Test.javac.out -XDrawDiagnostics -Werror -Xdoclint:all Test.java
    2.11 + */
    2.12 +
    2.13 +package p;
    2.14 +
    2.15 +/**
    2.16 + * <a name="dupTest">dupTest</a>
    2.17 + * <a name="dupTest">dupTest again</a>
    2.18 + *
    2.19 + * <a name="dupTestField">dupTestField</a>
    2.20 + * <a name="dupTestMethod">dupTestMethod</a>
    2.21 +
    2.22 + * <a name="okClass">okClass</a>
    2.23 + * <a name="okField">okField</a>
    2.24 + * <a name="okMethod">okMethod</a>
    2.25 + */
    2.26 +public class Test {
    2.27 +    /** <a name="dupTestField">dupTestField again</a> */
    2.28 +    public int f;
    2.29 +
    2.30 +    /** <a name="dupTestMethod">dupTestMethod again</a> */
    2.31 +    public void m() { }
    2.32 +
    2.33 +    /**
    2.34 +     * <a name="dupNested">dupNested</a>
    2.35 +     * <a name="dupNested">dupNested again</a>
    2.36 +     * <a name="dupNestedField">dupNestedField</a>
    2.37 +     * <a name="dupNestedMethod">dupNestedMethod</a>
    2.38 +     *
    2.39 +     * <a name="okClass">okClass again</a>
    2.40 +     */
    2.41 +    public class Nested {
    2.42 +        /**
    2.43 +         * <a name="dupNestedField">dupNestedField</a>
    2.44 +         *
    2.45 +         * <a name="okField">okField again</a>
    2.46 +         */
    2.47 +        public int f;
    2.48 +
    2.49 +        /**
    2.50 +         * <a name="dupNestedMethod">dupNestedMethod</a>
    2.51 +         *
    2.52 +         * <a name="okMethod">okMethod again</a>
    2.53 +         */
    2.54 +        public void m() { }
    2.55 +    }
    2.56 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/tools/doclint/anchorTests/p/Test.javac.out	Tue Sep 24 10:51:28 2013 -0700
     3.3 @@ -0,0 +1,7 @@
     3.4 +Test.java:14:7: compiler.err.proc.messager: anchor already defined: dupTest
     3.5 +Test.java:24:12: compiler.err.proc.messager: anchor already defined: dupTestField
     3.6 +Test.java:27:12: compiler.err.proc.messager: anchor already defined: dupTestMethod
     3.7 +Test.java:32:11: compiler.err.proc.messager: anchor already defined: dupNested
     3.8 +Test.java:40:15: compiler.err.proc.messager: anchor already defined: dupNestedField
     3.9 +Test.java:47:15: compiler.err.proc.messager: anchor already defined: dupNestedMethod
    3.10 +6 errors
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/test/tools/doclint/anchorTests/p/Test.out	Tue Sep 24 10:51:28 2013 -0700
     4.3 @@ -0,0 +1,19 @@
     4.4 +Test.java:14: error: anchor already defined: dupTest
     4.5 + * <a name="dupTest">dupTest again</a>
     4.6 +      ^
     4.7 +Test.java:24: error: anchor already defined: dupTestField
     4.8 +    /** <a name="dupTestField">dupTestField again</a> */
     4.9 +           ^
    4.10 +Test.java:27: error: anchor already defined: dupTestMethod
    4.11 +    /** <a name="dupTestMethod">dupTestMethod again</a> */
    4.12 +           ^
    4.13 +Test.java:32: error: anchor already defined: dupNested
    4.14 +     * <a name="dupNested">dupNested again</a>
    4.15 +          ^
    4.16 +Test.java:40: error: anchor already defined: dupNestedField
    4.17 +         * <a name="dupNestedField">dupNestedField</a>
    4.18 +              ^
    4.19 +Test.java:47: error: anchor already defined: dupNestedMethod
    4.20 +         * <a name="dupNestedMethod">dupNestedMethod</a>
    4.21 +              ^
    4.22 +6 errors
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/test/tools/doclint/anchorTests/p/package-info.java	Tue Sep 24 10:51:28 2013 -0700
     5.3 @@ -0,0 +1,15 @@
     5.4 +/* @test /nodynamiccopyright/
     5.5 + * @bug 8025246
     5.6 + * @summary doclint is showing error on anchor already defined when it's not
     5.7 + * @library ../..
     5.8 + * @build DocLintTester
     5.9 + * @run main DocLintTester -ref package-info.out package-info.java
    5.10 + * @compile/fail/ref=package-info.javac.out -XDrawDiagnostics -Werror -Xdoclint:all package-info.java
    5.11 + */
    5.12 +
    5.13 +/**
    5.14 + * <a name=here>here</a>
    5.15 + * <a name=here>here again</a>
    5.16 + */
    5.17 +package p;
    5.18 +
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/test/tools/doclint/anchorTests/p/package-info.javac.out	Tue Sep 24 10:51:28 2013 -0700
     6.3 @@ -0,0 +1,2 @@
     6.4 +package-info.java:12:7: compiler.err.proc.messager: anchor already defined: here
     6.5 +1 error
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/test/tools/doclint/anchorTests/p/package-info.out	Tue Sep 24 10:51:28 2013 -0700
     7.3 @@ -0,0 +1,4 @@
     7.4 +package-info.java:12: error: anchor already defined: here
     7.5 + * <a name=here>here again</a>
     7.6 +      ^
     7.7 +1 error

mercurial