diff -r 1afdf1f1472b -r 6b6311a8c9cc src/share/classes/com/sun/tools/doclint/Checker.java --- 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();