OpenJDK / bsd-port / jdk8 / langtools
changeset 1498:6b6311a8c9cc
8006236: doclint: structural issue hidden
Reviewed-by: darcy
author | jjg |
---|---|
date | Wed, 16 Jan 2013 10:29:52 -0800 |
parents | 1afdf1f1472b |
children | 63b20bde7cd6 |
files | src/share/classes/com/sun/tools/doclint/Checker.java test/tools/doclint/EndTagsTest.java test/tools/doclint/EndTagsTest.out |
diffstat | 3 files changed, 85 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/doclint/Checker.java Wed Jan 16 17:40:28 2013 +0000 +++ b/src/share/classes/com/sun/tools/doclint/Checker.java Wed Jan 16 10:29:52 2013 -0800 @@ -25,6 +25,7 @@ package com.sun.tools.doclint; +import com.sun.source.doctree.LiteralTree; import java.util.regex.Matcher; import com.sun.source.doctree.LinkTree; import java.net.URI; @@ -359,9 +360,8 @@ env.messages.error(HTML, tree, "dc.tag.unknown", treeName); } else if (t.endKind == HtmlTag.EndKind.NONE) { env.messages.error(HTML, tree, "dc.tag.end.not.permitted", treeName); - } else if (tagStack.isEmpty()) { - env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName); } else { + boolean done = false; while (!tagStack.isEmpty()) { TagStackItem top = tagStack.peek(); if (t == top.tag) { @@ -383,6 +383,7 @@ env.messages.error(HTML, tree, "dc.text.not.allowed", treeName); } tagStack.pop(); + done = true; break; } else if (top.tag == null || top.tag.endKind != HtmlTag.EndKind.REQUIRED) { tagStack.pop(); @@ -400,10 +401,15 @@ tagStack.pop(); } else { env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName); + done = true; break; } } } + + if (!done && tagStack.isEmpty()) { + env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName); + } } return super.visitEndElement(tree, ignore); @@ -546,6 +552,19 @@ } @Override + public Void visitLiteral(LiteralTree tree, Void ignore) { + if (tree.getKind() == DocTree.Kind.CODE) { + for (TagStackItem tsi: tagStack) { + if (tsi.tag == HtmlTag.CODE) { + env.messages.warning(HTML, tree, "dc.tag.nested.not.allowed", "code"); + break; + } + } + } + return super.visitLiteral(tree, ignore); + } + + @Override public Void visitParam(ParamTree tree, Void ignore) { boolean typaram = tree.isTypeParameter(); IdentifierTree nameTree = tree.getName();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/doclint/EndTagsTest.java Wed Jan 16 10:29:52 2013 -0800 @@ -0,0 +1,39 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8006236 + * @summary doclint: structural issue hidden + * @build DocLintTester + * @run main DocLintTester -Xmsgs:-html EndTagsTest.java + * @run main DocLintTester -ref EndTagsTest.out EndTagsTest.java + */ + +/** */ +public class EndTagsTest { + /** <p> <a name="a1"> text <img alt="image" src="image.png"> </a> </p> */ + public void valid_all() { } + + /** <p> <a name="a2"> text <img alt="image" src="image.png"> </a> */ + public void valid_omit_optional_close() { } + + /** </a> */ + public void invalid_missing_start() { } + + /** <p> </a> */ + public void invalid_missing_start_2() { } + + /** <p> text </p> </a> */ + public void invalid_missing_start_3() { } + + /** <img alt="image" src="image.png"> </img> */ + public void invalid_end() { } + + /** <invalid> </invalid> */ + public void unknown_start_end() { } + + /** <invalid> */ + public void unknown_start() { } + + /** </invalid> */ + public void unknown_end() { } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/doclint/EndTagsTest.out Wed Jan 16 10:29:52 2013 -0800 @@ -0,0 +1,25 @@ +EndTagsTest.java:18: error: unexpected end tag: </a> + /** </a> */ + ^ +EndTagsTest.java:21: error: unexpected end tag: </a> + /** <p> </a> */ + ^ +EndTagsTest.java:24: error: unexpected end tag: </a> + /** <p> text </p> </a> */ + ^ +EndTagsTest.java:27: error: invalid end tag: </img> + /** <img alt="image" src="image.png"> </img> */ + ^ +EndTagsTest.java:30: error: unknown tag: invalid + /** <invalid> </invalid> */ + ^ +EndTagsTest.java:30: error: unknown tag: invalid + /** <invalid> </invalid> */ + ^ +EndTagsTest.java:33: error: unknown tag: invalid + /** <invalid> */ + ^ +EndTagsTest.java:36: error: unknown tag: invalid + /** </invalid> */ + ^ +8 errors