提交 c979f97e 编写于 作者: J jjg

8010317: DocLint incorrectly reports some <pre> tags as empty

Reviewed-by: darcy
上级 de70d3c4
...@@ -25,20 +25,18 @@ ...@@ -25,20 +25,18 @@
package com.sun.tools.doclint; package com.sun.tools.doclint;
import com.sun.source.doctree.LiteralTree;
import java.util.regex.Matcher;
import com.sun.source.doctree.LinkTree;
import java.net.URI;
import java.util.regex.Pattern;
import java.io.IOException; import java.io.IOException;
import com.sun.tools.javac.tree.DocPretty;
import java.io.StringWriter; import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Deque; import java.util.Deque;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.lang.model.element.Element; import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind; import javax.lang.model.element.ElementKind;
...@@ -52,12 +50,15 @@ import javax.tools.Diagnostic.Kind; ...@@ -52,12 +50,15 @@ import javax.tools.Diagnostic.Kind;
import com.sun.source.doctree.AttributeTree; import com.sun.source.doctree.AttributeTree;
import com.sun.source.doctree.AuthorTree; import com.sun.source.doctree.AuthorTree;
import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocCommentTree;
import com.sun.source.doctree.DocRootTree;
import com.sun.source.doctree.DocTree; import com.sun.source.doctree.DocTree;
import com.sun.source.doctree.EndElementTree; import com.sun.source.doctree.EndElementTree;
import com.sun.source.doctree.EntityTree; import com.sun.source.doctree.EntityTree;
import com.sun.source.doctree.ErroneousTree; import com.sun.source.doctree.ErroneousTree;
import com.sun.source.doctree.IdentifierTree; import com.sun.source.doctree.IdentifierTree;
import com.sun.source.doctree.InheritDocTree; import com.sun.source.doctree.InheritDocTree;
import com.sun.source.doctree.LinkTree;
import com.sun.source.doctree.LiteralTree;
import com.sun.source.doctree.ParamTree; import com.sun.source.doctree.ParamTree;
import com.sun.source.doctree.ReferenceTree; import com.sun.source.doctree.ReferenceTree;
import com.sun.source.doctree.ReturnTree; import com.sun.source.doctree.ReturnTree;
...@@ -67,11 +68,12 @@ import com.sun.source.doctree.SinceTree; ...@@ -67,11 +68,12 @@ import com.sun.source.doctree.SinceTree;
import com.sun.source.doctree.StartElementTree; import com.sun.source.doctree.StartElementTree;
import com.sun.source.doctree.TextTree; import com.sun.source.doctree.TextTree;
import com.sun.source.doctree.ThrowsTree; import com.sun.source.doctree.ThrowsTree;
import com.sun.source.doctree.ValueTree;
import com.sun.source.doctree.VersionTree; import com.sun.source.doctree.VersionTree;
import com.sun.source.util.DocTreeScanner; import com.sun.source.util.DocTreeScanner;
import com.sun.source.util.TreePath; import com.sun.source.util.TreePath;
import com.sun.tools.doclint.HtmlTag.AttrKind; import com.sun.tools.doclint.HtmlTag.AttrKind;
import java.net.URISyntaxException; import com.sun.tools.javac.tree.DocPretty;
import static com.sun.tools.doclint.Messages.Group.*; import static com.sun.tools.doclint.Messages.Group.*;
...@@ -95,6 +97,7 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -95,6 +97,7 @@ public class Checker extends DocTreeScanner<Void, Void> {
public enum Flag { public enum Flag {
TABLE_HAS_CAPTION, TABLE_HAS_CAPTION,
HAS_ELEMENT, HAS_ELEMENT,
HAS_INLINE_TAG,
HAS_TEXT, HAS_TEXT,
REPORTED_BAD_INLINE REPORTED_BAD_INLINE
} }
...@@ -418,7 +421,8 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -418,7 +421,8 @@ public class Checker extends DocTreeScanner<Void, Void> {
} }
if (t.flags.contains(HtmlTag.Flag.EXPECT_CONTENT) if (t.flags.contains(HtmlTag.Flag.EXPECT_CONTENT)
&& !top.flags.contains(Flag.HAS_TEXT) && !top.flags.contains(Flag.HAS_TEXT)
&& !top.flags.contains(Flag.HAS_ELEMENT)) { && !top.flags.contains(Flag.HAS_ELEMENT)
&& !top.flags.contains(Flag.HAS_INLINE_TAG)) {
env.messages.warning(HTML, tree, "dc.tag.empty", treeName); env.messages.warning(HTML, tree, "dc.tag.empty", treeName);
} }
tagStack.pop(); tagStack.pop();
...@@ -570,8 +574,15 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -570,8 +574,15 @@ public class Checker extends DocTreeScanner<Void, Void> {
return super.visitAuthor(tree, ignore); return super.visitAuthor(tree, ignore);
} }
@Override
public Void visitDocRoot(DocRootTree tree, Void ignore) {
markEnclosingTag(Flag.HAS_INLINE_TAG);
return super.visitDocRoot(tree, ignore);
}
@Override @Override
public Void visitInheritDoc(InheritDocTree tree, Void ignore) { public Void visitInheritDoc(InheritDocTree tree, Void ignore) {
markEnclosingTag(Flag.HAS_INLINE_TAG);
// TODO: verify on overridden method // TODO: verify on overridden method
foundInheritDoc = true; foundInheritDoc = true;
return super.visitInheritDoc(tree, ignore); return super.visitInheritDoc(tree, ignore);
...@@ -579,6 +590,7 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -579,6 +590,7 @@ public class Checker extends DocTreeScanner<Void, Void> {
@Override @Override
public Void visitLink(LinkTree tree, Void ignore) { public Void visitLink(LinkTree tree, Void ignore) {
markEnclosingTag(Flag.HAS_INLINE_TAG);
// simulate inline context on tag stack // simulate inline context on tag stack
HtmlTag t = (tree.getKind() == DocTree.Kind.LINK) HtmlTag t = (tree.getKind() == DocTree.Kind.LINK)
? HtmlTag.CODE : HtmlTag.SPAN; ? HtmlTag.CODE : HtmlTag.SPAN;
...@@ -592,6 +604,7 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -592,6 +604,7 @@ public class Checker extends DocTreeScanner<Void, Void> {
@Override @Override
public Void visitLiteral(LiteralTree tree, Void ignore) { public Void visitLiteral(LiteralTree tree, Void ignore) {
markEnclosingTag(Flag.HAS_INLINE_TAG);
if (tree.getKind() == DocTree.Kind.CODE) { if (tree.getKind() == DocTree.Kind.CODE) {
for (TagStackItem tsi: tagStack) { for (TagStackItem tsi: tagStack) {
if (tsi.tag == HtmlTag.CODE) { if (tsi.tag == HtmlTag.CODE) {
...@@ -745,6 +758,12 @@ public class Checker extends DocTreeScanner<Void, Void> { ...@@ -745,6 +758,12 @@ public class Checker extends DocTreeScanner<Void, Void> {
} }
} }
@Override
public Void visitValue(ValueTree tree, Void ignore) {
markEnclosingTag(Flag.HAS_INLINE_TAG);
return super.visitValue(tree, ignore);
}
@Override @Override
public Void visitVersion(VersionTree tree, Void ignore) { public Void visitVersion(VersionTree tree, Void ignore) {
warnIfEmpty(tree, tree.getBody()); warnIfEmpty(tree, tree.getBody());
......
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8010317
* @summary DocLint incorrectly reports some <pre> tags as empty
* @build DocLintTester
* @run main DocLintTester -Xmsgs:html EmptyPreTest.java
*/
public class EmptyPreTest {
/** <pre> {@code xyzzy} </pre> */
public void m1() { }
/** <pre> {@docRoot} </pre> */
public void m2() { }
/** <pre> {@link java.lang.String} </pre> */
public void m3() { }
/** <pre> {@value} </pre> */
public static final int v1 = 1;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册