src/share/classes/com/sun/tools/doclint/Checker.java

changeset 2110
b024fe427d24
parent 2054
3ae62331a56f
child 2169
667843bd2193
     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">

mercurial