8006236: doclint: structural issue hidden

Wed, 16 Jan 2013 10:29:52 -0800

author
jjg
date
Wed, 16 Jan 2013 10:29:52 -0800
changeset 1499
6b6311a8c9cc
parent 1498
1afdf1f1472b
child 1500
63b20bde7cd6

8006236: doclint: structural issue hidden
Reviewed-by: darcy

src/share/classes/com/sun/tools/doclint/Checker.java file | annotate | diff | comparison | revisions
test/tools/doclint/EndTagsTest.java file | annotate | diff | comparison | revisions
test/tools/doclint/EndTagsTest.out file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/doclint/Checker.java	Wed Jan 16 17:40:28 2013 +0000
     1.2 +++ b/src/share/classes/com/sun/tools/doclint/Checker.java	Wed Jan 16 10:29:52 2013 -0800
     1.3 @@ -25,6 +25,7 @@
     1.4  
     1.5  package com.sun.tools.doclint;
     1.6  
     1.7 +import com.sun.source.doctree.LiteralTree;
     1.8  import java.util.regex.Matcher;
     1.9  import com.sun.source.doctree.LinkTree;
    1.10  import java.net.URI;
    1.11 @@ -359,9 +360,8 @@
    1.12              env.messages.error(HTML, tree, "dc.tag.unknown", treeName);
    1.13          } else if (t.endKind == HtmlTag.EndKind.NONE) {
    1.14              env.messages.error(HTML, tree, "dc.tag.end.not.permitted", treeName);
    1.15 -        } else if (tagStack.isEmpty()) {
    1.16 -            env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
    1.17          } else {
    1.18 +            boolean done = false;
    1.19              while (!tagStack.isEmpty()) {
    1.20                  TagStackItem top = tagStack.peek();
    1.21                  if (t == top.tag) {
    1.22 @@ -383,6 +383,7 @@
    1.23                          env.messages.error(HTML, tree, "dc.text.not.allowed", treeName);
    1.24                      }
    1.25                      tagStack.pop();
    1.26 +                    done = true;
    1.27                      break;
    1.28                  } else if (top.tag == null || top.tag.endKind != HtmlTag.EndKind.REQUIRED) {
    1.29                      tagStack.pop();
    1.30 @@ -400,10 +401,15 @@
    1.31                          tagStack.pop();
    1.32                      } else {
    1.33                          env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
    1.34 +                        done = true;
    1.35                          break;
    1.36                      }
    1.37                  }
    1.38              }
    1.39 +
    1.40 +            if (!done && tagStack.isEmpty()) {
    1.41 +                env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
    1.42 +            }
    1.43          }
    1.44  
    1.45          return super.visitEndElement(tree, ignore);
    1.46 @@ -546,6 +552,19 @@
    1.47      }
    1.48  
    1.49      @Override
    1.50 +    public Void visitLiteral(LiteralTree tree, Void ignore) {
    1.51 +        if (tree.getKind() == DocTree.Kind.CODE) {
    1.52 +            for (TagStackItem tsi: tagStack) {
    1.53 +                if (tsi.tag == HtmlTag.CODE) {
    1.54 +                    env.messages.warning(HTML, tree, "dc.tag.nested.not.allowed", "code");
    1.55 +                    break;
    1.56 +                }
    1.57 +            }
    1.58 +        }
    1.59 +        return super.visitLiteral(tree, ignore);
    1.60 +    }
    1.61 +
    1.62 +    @Override
    1.63      public Void visitParam(ParamTree tree, Void ignore) {
    1.64          boolean typaram = tree.isTypeParameter();
    1.65          IdentifierTree nameTree = tree.getName();
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/test/tools/doclint/EndTagsTest.java	Wed Jan 16 10:29:52 2013 -0800
     2.3 @@ -0,0 +1,39 @@
     2.4 +/*
     2.5 + * @test /nodynamiccopyright/
     2.6 + * @bug 8006236
     2.7 + * @summary doclint: structural issue hidden
     2.8 + * @build DocLintTester
     2.9 + * @run main DocLintTester -Xmsgs:-html EndTagsTest.java
    2.10 + * @run main DocLintTester -ref EndTagsTest.out EndTagsTest.java
    2.11 + */
    2.12 +
    2.13 +/** */
    2.14 +public class EndTagsTest {
    2.15 +    /** <p>  <a name="a1"> text <img alt="image" src="image.png"> </a> </p> */
    2.16 +    public void valid_all() { }
    2.17 +
    2.18 +    /** <p>  <a name="a2"> text <img alt="image" src="image.png"> </a> */
    2.19 +    public void valid_omit_optional_close() { }
    2.20 +
    2.21 +    /** </a> */
    2.22 +    public void invalid_missing_start() { }
    2.23 +
    2.24 +    /** <p> </a> */
    2.25 +    public void invalid_missing_start_2() { }
    2.26 +
    2.27 +    /** <p> text </p> </a> */
    2.28 +    public void invalid_missing_start_3() { }
    2.29 +
    2.30 +    /** <img alt="image" src="image.png"> </img> */
    2.31 +    public void invalid_end() { }
    2.32 +
    2.33 +    /** <invalid> </invalid> */
    2.34 +    public void unknown_start_end() { }
    2.35 +
    2.36 +    /** <invalid> */
    2.37 +    public void unknown_start() { }
    2.38 +
    2.39 +    /** </invalid> */
    2.40 +    public void unknown_end() { }
    2.41 +}
    2.42 +
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/tools/doclint/EndTagsTest.out	Wed Jan 16 10:29:52 2013 -0800
     3.3 @@ -0,0 +1,25 @@
     3.4 +EndTagsTest.java:18: error: unexpected end tag: </a>
     3.5 +    /** </a> */
     3.6 +        ^
     3.7 +EndTagsTest.java:21: error: unexpected end tag: </a>
     3.8 +    /** <p> </a> */
     3.9 +            ^
    3.10 +EndTagsTest.java:24: error: unexpected end tag: </a>
    3.11 +    /** <p> text </p> </a> */
    3.12 +                      ^
    3.13 +EndTagsTest.java:27: error: invalid end tag: </img>
    3.14 +    /** <img alt="image" src="image.png"> </img> */
    3.15 +                                          ^
    3.16 +EndTagsTest.java:30: error: unknown tag: invalid
    3.17 +    /** <invalid> </invalid> */
    3.18 +        ^
    3.19 +EndTagsTest.java:30: error: unknown tag: invalid
    3.20 +    /** <invalid> </invalid> */
    3.21 +                  ^
    3.22 +EndTagsTest.java:33: error: unknown tag: invalid
    3.23 +    /** <invalid> */
    3.24 +        ^
    3.25 +EndTagsTest.java:36: error: unknown tag: invalid
    3.26 +    /** </invalid> */
    3.27 +        ^
    3.28 +8 errors

mercurial