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();