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

changeset 1499
6b6311a8c9cc
parent 1495
bc1023e0e533
child 1502
916143318f10
equal deleted inserted replaced
1498:1afdf1f1472b 1499:6b6311a8c9cc
23 * questions. 23 * questions.
24 */ 24 */
25 25
26 package com.sun.tools.doclint; 26 package com.sun.tools.doclint;
27 27
28 import com.sun.source.doctree.LiteralTree;
28 import java.util.regex.Matcher; 29 import java.util.regex.Matcher;
29 import com.sun.source.doctree.LinkTree; 30 import com.sun.source.doctree.LinkTree;
30 import java.net.URI; 31 import java.net.URI;
31 import java.util.regex.Pattern; 32 import java.util.regex.Pattern;
32 import java.io.IOException; 33 import java.io.IOException;
357 final HtmlTag t = HtmlTag.get(treeName); 358 final HtmlTag t = HtmlTag.get(treeName);
358 if (t == null) { 359 if (t == null) {
359 env.messages.error(HTML, tree, "dc.tag.unknown", treeName); 360 env.messages.error(HTML, tree, "dc.tag.unknown", treeName);
360 } else if (t.endKind == HtmlTag.EndKind.NONE) { 361 } else if (t.endKind == HtmlTag.EndKind.NONE) {
361 env.messages.error(HTML, tree, "dc.tag.end.not.permitted", treeName); 362 env.messages.error(HTML, tree, "dc.tag.end.not.permitted", treeName);
362 } else if (tagStack.isEmpty()) {
363 env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
364 } else { 363 } else {
364 boolean done = false;
365 while (!tagStack.isEmpty()) { 365 while (!tagStack.isEmpty()) {
366 TagStackItem top = tagStack.peek(); 366 TagStackItem top = tagStack.peek();
367 if (t == top.tag) { 367 if (t == top.tag) {
368 switch (t) { 368 switch (t) {
369 case TABLE: 369 case TABLE:
381 if (t.flags.contains(HtmlTag.Flag.NO_TEXT) 381 if (t.flags.contains(HtmlTag.Flag.NO_TEXT)
382 && top.flags.contains(Flag.HAS_TEXT)) { 382 && top.flags.contains(Flag.HAS_TEXT)) {
383 env.messages.error(HTML, tree, "dc.text.not.allowed", treeName); 383 env.messages.error(HTML, tree, "dc.text.not.allowed", treeName);
384 } 384 }
385 tagStack.pop(); 385 tagStack.pop();
386 done = true;
386 break; 387 break;
387 } else if (top.tag == null || top.tag.endKind != HtmlTag.EndKind.REQUIRED) { 388 } else if (top.tag == null || top.tag.endKind != HtmlTag.EndKind.REQUIRED) {
388 tagStack.pop(); 389 tagStack.pop();
389 } else { 390 } else {
390 boolean found = false; 391 boolean found = false;
398 env.messages.error(HTML, top.tree, "dc.tag.start.unmatched", 399 env.messages.error(HTML, top.tree, "dc.tag.start.unmatched",
399 ((StartElementTree) top.tree).getName()); 400 ((StartElementTree) top.tree).getName());
400 tagStack.pop(); 401 tagStack.pop();
401 } else { 402 } else {
402 env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName); 403 env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
404 done = true;
403 break; 405 break;
404 } 406 }
405 } 407 }
408 }
409
410 if (!done && tagStack.isEmpty()) {
411 env.messages.error(HTML, tree, "dc.tag.end.unexpected", treeName);
406 } 412 }
407 } 413 }
408 414
409 return super.visitEndElement(tree, ignore); 415 return super.visitEndElement(tree, ignore);
410 } 416 }
544 tagStack.pop(); 550 tagStack.pop();
545 } 551 }
546 } 552 }
547 553
548 @Override 554 @Override
555 public Void visitLiteral(LiteralTree tree, Void ignore) {
556 if (tree.getKind() == DocTree.Kind.CODE) {
557 for (TagStackItem tsi: tagStack) {
558 if (tsi.tag == HtmlTag.CODE) {
559 env.messages.warning(HTML, tree, "dc.tag.nested.not.allowed", "code");
560 break;
561 }
562 }
563 }
564 return super.visitLiteral(tree, ignore);
565 }
566
567 @Override
549 public Void visitParam(ParamTree tree, Void ignore) { 568 public Void visitParam(ParamTree tree, Void ignore) {
550 boolean typaram = tree.isTypeParameter(); 569 boolean typaram = tree.isTypeParameter();
551 IdentifierTree nameTree = tree.getName(); 570 IdentifierTree nameTree = tree.getName();
552 Element e = env.currElement; 571 Element e = env.currElement;
553 switch (e.getKind()) { 572 switch (e.getKind()) {

mercurial