< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/doclint/Checker.java
Print this page
*** 59,69 ****
import com.sun.source.doctree.EntityTree;
import com.sun.source.doctree.ErroneousTree;
import com.sun.source.doctree.IdentifierTree;
import com.sun.source.doctree.IndexTree;
import com.sun.source.doctree.InheritDocTree;
- import com.sun.source.doctree.InlineTagTree;
import com.sun.source.doctree.LinkTree;
import com.sun.source.doctree.LiteralTree;
import com.sun.source.doctree.ParamTree;
import com.sun.source.doctree.ProvidesTree;
import com.sun.source.doctree.ReferenceTree;
--- 59,68 ----
*** 138,157 ****
return String.valueOf(tag);
}
}
private final Deque<TagStackItem> tagStack; // TODO: maybe want to record starting tree as well
! private HtmlTag currHeaderTag;
! private final int implicitHeaderLevel;
// <editor-fold defaultstate="collapsed" desc="Top level">
Checker(Env env) {
this.env = Assert.checkNonNull(env);
tagStack = new LinkedList<>();
- implicitHeaderLevel = env.implicitHeaderLevel;
}
public Void scan(DocCommentTree tree, TreePath p) {
env.initTypes();
env.setCurrent(p, tree);
--- 137,155 ----
return String.valueOf(tag);
}
}
private final Deque<TagStackItem> tagStack; // TODO: maybe want to record starting tree as well
! private HtmlTag currHeadingTag;
! private int implicitHeadingRank;
// <editor-fold defaultstate="collapsed" desc="Top level">
Checker(Env env) {
this.env = Assert.checkNonNull(env);
tagStack = new LinkedList<>();
}
public Void scan(DocCommentTree tree, TreePath p) {
env.initTypes();
env.setCurrent(p, tree);
*** 186,203 ****
return null;
}
}
tagStack.clear();
! currHeaderTag = null;
foundParams.clear();
foundThrows.clear();
foundInheritDoc = false;
foundReturn = false;
hasNonWhitespaceText = false;
scan(new DocTreePath(p, tree), null);
if (!isOverridingMethod) {
switch (env.currElement.getKind()) {
case METHOD:
--- 184,232 ----
return null;
}
}
tagStack.clear();
! currHeadingTag = null;
foundParams.clear();
foundThrows.clear();
foundInheritDoc = false;
foundReturn = false;
hasNonWhitespaceText = false;
+ switch (p.getLeaf().getKind()) {
+ // the following are for declarations that have their own top-level page,
+ // and so the doc comment comes after the <h1> page title.
+ case MODULE:
+ case PACKAGE:
+ case CLASS:
+ case INTERFACE:
+ case ENUM:
+ case ANNOTATION_TYPE:
+ implicitHeadingRank = 1;
+ break;
+
+ // this is for html files
+ // ... if it is a legacy package.html, the doc comment comes after the <h1> page title
+ // ... otherwise, (e.g. overview file and doc-files/*.html files) no additional headings are inserted
+ case COMPILATION_UNIT:
+ implicitHeadingRank = fo.isNameCompatible("package", JavaFileObject.Kind.HTML) ? 1 : 0;
+ break;
+
+ // the following are for member declarations, which appear in the page
+ // for the enclosing type, and so appear after the <h2> "Members"
+ // aggregate heading and the specific <h3> "Member signature" heading.
+ case METHOD:
+ case VARIABLE:
+ implicitHeadingRank = 3;
+ break;
+
+ default:
+ Assert.error("unexpected tree kind: " + p.getLeaf().getKind() + " " + fo);
+ }
+
scan(new DocTreePath(p, tree), null);
if (!isOverridingMethod) {
switch (env.currElement.getKind()) {
case METHOD:
*** 326,338 ****
markEnclosingTag(Flag.HAS_ELEMENT);
checkStructure(tree, t);
// tag specific checks
switch (t) {
! // check for out of sequence headers, such as <h1>...</h1> <h3>...</h3>
case H1: case H2: case H3: case H4: case H5: case H6:
! checkHeader(tree, t);
break;
}
if (t.flags.contains(HtmlTag.Flag.NO_NEST)) {
for (TagStackItem i: tagStack) {
--- 355,367 ----
markEnclosingTag(Flag.HAS_ELEMENT);
checkStructure(tree, t);
// tag specific checks
switch (t) {
! // check for out of sequence headings, such as <h1>...</h1> <h3>...</h3>
case H1: case H2: case H3: case H4: case H5: case H6:
! checkHeading(tree, t);
break;
}
if (t.flags.contains(HtmlTag.Flag.NO_NEST)) {
for (TagStackItem i: tagStack) {
*** 444,470 ****
}
env.messages.error(HTML, tree, "dc.tag.not.allowed.here", treeName);
}
! private void checkHeader(StartElementTree tree, HtmlTag tag) {
// verify the new tag
! if (getHeaderLevel(tag) > getHeaderLevel(currHeaderTag) + 1) {
! if (currHeaderTag == null) {
! env.messages.error(ACCESSIBILITY, tree, "dc.tag.header.sequence.1", tag);
} else {
! env.messages.error(ACCESSIBILITY, tree, "dc.tag.header.sequence.2",
! tag, currHeaderTag);
}
}
! currHeaderTag = tag;
}
! private int getHeaderLevel(HtmlTag tag) {
if (tag == null)
! return implicitHeaderLevel;
switch (tag) {
case H1: return 1;
case H2: return 2;
case H3: return 3;
case H4: return 4;
--- 473,503 ----
}
env.messages.error(HTML, tree, "dc.tag.not.allowed.here", treeName);
}
! private void checkHeading(StartElementTree tree, HtmlTag tag) {
// verify the new tag
! if (getHeadingRank(tag) > getHeadingRank(currHeadingTag) + 1) {
! if (currHeadingTag == null) {
! env.messages.error(ACCESSIBILITY, tree, "dc.tag.heading.sequence.1",
! tag, implicitHeadingRank);
} else {
! env.messages.error(ACCESSIBILITY, tree, "dc.tag.heading.sequence.2",
! tag, currHeadingTag);
}
+ } else if (getHeadingRank(tag) <= implicitHeadingRank) {
+ env.messages.error(ACCESSIBILITY, tree, "dc.tag.heading.sequence.3",
+ tag, implicitHeadingRank);
}
! currHeadingTag = tag;
}
! private int getHeadingRank(HtmlTag tag) {
if (tag == null)
! return implicitHeadingRank;
switch (tag) {
case H1: return 1;
case H2: return 2;
case H3: return 3;
case H4: return 4;
*** 664,678 ****
case INVALID:
env.messages.error(HTML, tree, "dc.attr.unknown", name);
break;
case OBSOLETE:
! env.messages.warning(ACCESSIBILITY, tree, "dc.attr.obsolete", name);
break;
case USE_CSS:
! env.messages.warning(ACCESSIBILITY, tree, "dc.attr.obsolete.use.css", name);
break;
case HTML5:
env.messages.error(HTML, tree, "dc.attr.not.supported.html4", name);
break;
--- 697,711 ----
case INVALID:
env.messages.error(HTML, tree, "dc.attr.unknown", name);
break;
case OBSOLETE:
! env.messages.warning(HTML, tree, "dc.attr.obsolete", name);
break;
case USE_CSS:
! env.messages.warning(HTML, tree, "dc.attr.obsolete.use.css", name);
break;
case HTML5:
env.messages.error(HTML, tree, "dc.attr.not.supported.html4", name);
break;
< prev index next >