1.1 --- a/src/share/classes/com/sun/tools/doclint/Checker.java Fri Oct 11 23:31:06 2013 -0700 1.2 +++ b/src/share/classes/com/sun/tools/doclint/Checker.java Mon Oct 14 12:38:09 2013 -0700 1.3 @@ -213,6 +213,7 @@ 1.4 public Void visitDocComment(DocCommentTree tree, Void ignore) { 1.5 super.visitDocComment(tree, ignore); 1.6 for (TagStackItem tsi: tagStack) { 1.7 + warnIfEmpty(tsi, null); 1.8 if (tsi.tree.getKind() == DocTree.Kind.START_ELEMENT 1.9 && tsi.tag.endKind == HtmlTag.EndKind.REQUIRED) { 1.10 StartElementTree t = (StartElementTree) tsi.tree; 1.11 @@ -270,7 +271,6 @@ 1.12 1.13 @Override 1.14 public Void visitStartElement(StartElementTree tree, Void ignore) { 1.15 - markEnclosingTag(Flag.HAS_ELEMENT); 1.16 final Name treeName = tree.getName(); 1.17 final HtmlTag t = HtmlTag.get(treeName); 1.18 if (t == null) { 1.19 @@ -279,7 +279,10 @@ 1.20 boolean done = false; 1.21 for (TagStackItem tsi: tagStack) { 1.22 if (tsi.tag.accepts(t)) { 1.23 - while (tagStack.peek() != tsi) tagStack.pop(); 1.24 + while (tagStack.peek() != tsi) { 1.25 + warnIfEmpty(tagStack.peek(), null); 1.26 + tagStack.pop(); 1.27 + } 1.28 done = true; 1.29 break; 1.30 } else if (tsi.tag.endKind != HtmlTag.EndKind.OPTIONAL) { 1.31 @@ -288,9 +291,13 @@ 1.32 } 1.33 } 1.34 if (!done && HtmlTag.BODY.accepts(t)) { 1.35 - tagStack.clear(); 1.36 + while (!tagStack.isEmpty()) { 1.37 + warnIfEmpty(tagStack.peek(), null); 1.38 + tagStack.pop(); 1.39 + } 1.40 } 1.41 1.42 + markEnclosingTag(Flag.HAS_ELEMENT); 1.43 checkStructure(tree, t); 1.44 1.45 // tag specific checks 1.46 @@ -447,12 +454,7 @@ 1.47 "dc.no.summary.or.caption.for.table"); 1.48 } 1.49 } 1.50 - if (t.flags.contains(HtmlTag.Flag.EXPECT_CONTENT) 1.51 - && !top.flags.contains(Flag.HAS_TEXT) 1.52 - && !top.flags.contains(Flag.HAS_ELEMENT) 1.53 - && !top.flags.contains(Flag.HAS_INLINE_TAG)) { 1.54 - env.messages.warning(HTML, tree, "dc.tag.empty", treeName); 1.55 - } 1.56 + warnIfEmpty(top, tree); 1.57 tagStack.pop(); 1.58 done = true; 1.59 break; 1.60 @@ -485,6 +487,20 @@ 1.61 1.62 return super.visitEndElement(tree, ignore); 1.63 } 1.64 + 1.65 + void warnIfEmpty(TagStackItem tsi, DocTree endTree) { 1.66 + if (tsi.tag != null && tsi.tree instanceof StartElementTree) { 1.67 + if (tsi.tag.flags.contains(HtmlTag.Flag.EXPECT_CONTENT) 1.68 + && !tsi.flags.contains(Flag.HAS_TEXT) 1.69 + && !tsi.flags.contains(Flag.HAS_ELEMENT) 1.70 + && !tsi.flags.contains(Flag.HAS_INLINE_TAG)) { 1.71 + DocTree tree = (endTree != null) ? endTree : tsi.tree; 1.72 + Name treeName = ((StartElementTree) tsi.tree).getName(); 1.73 + env.messages.warning(HTML, tree, "dc.tag.empty", treeName); 1.74 + } 1.75 + } 1.76 + } 1.77 + 1.78 // </editor-fold> 1.79 1.80 // <editor-fold defaultstate="collapsed" desc="HTML attributes">