12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.javadoc.internal.doclets.formats.html;
27
28 import java.text.SimpleDateFormat;
29 import java.util.*;
30 import java.util.regex.Matcher;
31 import java.util.regex.Pattern;
32
33 import javax.lang.model.element.AnnotationMirror;
34 import javax.lang.model.element.AnnotationValue;
35 import javax.lang.model.element.Element;
36 import javax.lang.model.element.ExecutableElement;
37 import javax.lang.model.element.ModuleElement;
38 import javax.lang.model.element.Name;
39 import javax.lang.model.element.PackageElement;
40 import javax.lang.model.element.TypeElement;
41 import javax.lang.model.element.VariableElement;
42 import javax.lang.model.type.DeclaredType;
43 import javax.lang.model.type.TypeMirror;
44 import javax.lang.model.util.SimpleAnnotationValueVisitor9;
45 import javax.lang.model.util.SimpleElementVisitor9;
46 import javax.lang.model.util.SimpleTypeVisitor9;
47
48 import com.sun.source.doctree.AttributeTree;
49 import com.sun.source.doctree.AttributeTree.ValueKind;
50 import com.sun.source.doctree.CommentTree;
51 import com.sun.source.doctree.DocRootTree;
52 import com.sun.source.doctree.DocTree;
53 import com.sun.source.doctree.DocTree.Kind;
54 import com.sun.source.doctree.EndElementTree;
55 import com.sun.source.doctree.EntityTree;
56 import com.sun.source.doctree.ErroneousTree;
57 import com.sun.source.doctree.IndexTree;
58 import com.sun.source.doctree.InheritDocTree;
59 import com.sun.source.doctree.LinkTree;
60 import com.sun.source.doctree.LiteralTree;
77 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
78 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
79 import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
80 import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
81 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
82 import jdk.javadoc.internal.doclets.toolkit.Content;
83 import jdk.javadoc.internal.doclets.toolkit.Messages;
84 import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter;
85 import jdk.javadoc.internal.doclets.toolkit.Resources;
86 import jdk.javadoc.internal.doclets.toolkit.taglets.DocRootTaglet;
87 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
88 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
89 import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
90 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
91 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
92 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
93 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
94 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
95 import jdk.javadoc.internal.doclets.toolkit.util.ImplementedMethods;
96 import jdk.javadoc.internal.doclets.toolkit.util.Utils;
97
98 import static com.sun.source.doctree.DocTree.Kind.*;
99 import static jdk.javadoc.internal.doclets.toolkit.util.CommentHelper.SPACER;
100
101
102 /**
103 * Class for the Html Format Code Generation specific to JavaDoc.
104 * This Class contains methods related to the Html Code Generation which
105 * are used extensively while generating the entire documentation.
106 *
107 * <p><b>This is NOT part of any supported API.
108 * If you write code that depends on this, you do so at your own risk.
109 * This code and its internal interfaces are subject to change or
110 * deletion without notice.</b>
111 *
112 * @author Atul M Dambalkar
113 * @author Robert Field
114 * @author Bhavesh Patel (Modified)
115 */
116 public class HtmlDocletWriter extends HtmlDocWriter {
1552 StringContent content = utils.isEnclosingPackageIncluded(refClass)
1553 ? new StringContent(utils.getSimpleName(refClass))
1554 : new StringContent(utils.getFullyQualifiedName(refClass));
1555 label = plainOrCode(isLinkPlain, content);
1556 } else {
1557 label = plainOrCode(isLinkPlain,
1558 new StringContent(utils.getSimpleName(refClass)));
1559 }
1560
1561 }
1562 return getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.DEFAULT, refClass)
1563 .label(label));
1564 } else if (refMem == null) {
1565 // Must be a member reference since refClass is not null and refMemName is not null.
1566 // However, refMem is null, so this referenced member does not exist.
1567 return (label.isEmpty() ? text: label);
1568 } else {
1569 // Must be a member reference since refClass is not null and refMemName is not null.
1570 // refMem is not null, so this @see tag must be referencing a valid member.
1571 TypeElement containing = utils.getEnclosingTypeElement(refMem);
1572 if (ch.getText(see).trim().startsWith("#") &&
1573 ! (utils.isPublic(containing) || utils.isLinkable(containing))) {
1574 // Since the link is relative and the holder is not even being
1575 // documented, this must be an inherited link. Redirect it.
1576 // The current class either overrides the referenced member or
1577 // inherits it automatically.
1578 if (this instanceof ClassWriterImpl) {
1579 containing = ((ClassWriterImpl) this).getTypeElement();
1580 } else if (!utils.isPublic(containing)) {
1581 messages.warning(
1582 ch.getDocTreePath(see), "doclet.see.class_or_package_not_accessible",
1583 tagName, utils.getFullyQualifiedName(containing));
1584 } else {
1585 messages.warning(
1586 ch.getDocTreePath(see), "doclet.see.class_or_package_not_found",
1587 tagName, seetext);
1588 }
1589 }
1590 if (configuration.currentTypeElement != containing) {
1591 refMemName = (utils.isConstructor(refMem))
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.javadoc.internal.doclets.formats.html;
27
28 import java.text.SimpleDateFormat;
29 import java.util.*;
30 import java.util.regex.Matcher;
31 import java.util.regex.Pattern;
32 import java.util.stream.Collectors;
33
34 import javax.lang.model.element.AnnotationMirror;
35 import javax.lang.model.element.AnnotationValue;
36 import javax.lang.model.element.Element;
37 import javax.lang.model.element.ElementKind;
38 import javax.lang.model.element.ExecutableElement;
39 import javax.lang.model.element.ModuleElement;
40 import javax.lang.model.element.Name;
41 import javax.lang.model.element.PackageElement;
42 import javax.lang.model.element.TypeElement;
43 import javax.lang.model.element.TypeParameterElement;
44 import javax.lang.model.element.VariableElement;
45 import javax.lang.model.type.DeclaredType;
46 import javax.lang.model.type.TypeMirror;
47 import javax.lang.model.util.SimpleAnnotationValueVisitor9;
48 import javax.lang.model.util.SimpleElementVisitor9;
49 import javax.lang.model.util.SimpleTypeVisitor9;
50
51 import com.sun.source.doctree.AttributeTree;
52 import com.sun.source.doctree.AttributeTree.ValueKind;
53 import com.sun.source.doctree.CommentTree;
54 import com.sun.source.doctree.DocRootTree;
55 import com.sun.source.doctree.DocTree;
56 import com.sun.source.doctree.DocTree.Kind;
57 import com.sun.source.doctree.EndElementTree;
58 import com.sun.source.doctree.EntityTree;
59 import com.sun.source.doctree.ErroneousTree;
60 import com.sun.source.doctree.IndexTree;
61 import com.sun.source.doctree.InheritDocTree;
62 import com.sun.source.doctree.LinkTree;
63 import com.sun.source.doctree.LiteralTree;
80 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
81 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
82 import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
83 import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
84 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
85 import jdk.javadoc.internal.doclets.toolkit.Content;
86 import jdk.javadoc.internal.doclets.toolkit.Messages;
87 import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter;
88 import jdk.javadoc.internal.doclets.toolkit.Resources;
89 import jdk.javadoc.internal.doclets.toolkit.taglets.DocRootTaglet;
90 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
91 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
92 import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
93 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
94 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
95 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
96 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
97 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
98 import jdk.javadoc.internal.doclets.toolkit.util.ImplementedMethods;
99 import jdk.javadoc.internal.doclets.toolkit.util.Utils;
100 import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberMap;
101
102 import static com.sun.source.doctree.DocTree.Kind.*;
103 import static jdk.javadoc.internal.doclets.toolkit.util.CommentHelper.SPACER;
104
105
106 /**
107 * Class for the Html Format Code Generation specific to JavaDoc.
108 * This Class contains methods related to the Html Code Generation which
109 * are used extensively while generating the entire documentation.
110 *
111 * <p><b>This is NOT part of any supported API.
112 * If you write code that depends on this, you do so at your own risk.
113 * This code and its internal interfaces are subject to change or
114 * deletion without notice.</b>
115 *
116 * @author Atul M Dambalkar
117 * @author Robert Field
118 * @author Bhavesh Patel (Modified)
119 */
120 public class HtmlDocletWriter extends HtmlDocWriter {
1556 StringContent content = utils.isEnclosingPackageIncluded(refClass)
1557 ? new StringContent(utils.getSimpleName(refClass))
1558 : new StringContent(utils.getFullyQualifiedName(refClass));
1559 label = plainOrCode(isLinkPlain, content);
1560 } else {
1561 label = plainOrCode(isLinkPlain,
1562 new StringContent(utils.getSimpleName(refClass)));
1563 }
1564
1565 }
1566 return getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.DEFAULT, refClass)
1567 .label(label));
1568 } else if (refMem == null) {
1569 // Must be a member reference since refClass is not null and refMemName is not null.
1570 // However, refMem is null, so this referenced member does not exist.
1571 return (label.isEmpty() ? text: label);
1572 } else {
1573 // Must be a member reference since refClass is not null and refMemName is not null.
1574 // refMem is not null, so this @see tag must be referencing a valid member.
1575 TypeElement containing = utils.getEnclosingTypeElement(refMem);
1576
1577 // Find the enclosing type where the method is actually visible,
1578 // in the inheritance hierarchy.
1579 if (refMem.getKind() == ElementKind.METHOD) {
1580 VisibleMemberMap vmm = configuration.
1581 getVisibleMemberMap(containing, VisibleMemberMap.Kind.METHODS);
1582 ExecutableElement overriddenMethod = vmm.getVisibleMethod((ExecutableElement)refMem);
1583 if (overriddenMethod != null)
1584 containing = utils.getEnclosingTypeElement(overriddenMethod);
1585 }
1586 if (ch.getText(see).trim().startsWith("#") &&
1587 ! (utils.isPublic(containing) || utils.isLinkable(containing))) {
1588 // Since the link is relative and the holder is not even being
1589 // documented, this must be an inherited link. Redirect it.
1590 // The current class either overrides the referenced member or
1591 // inherits it automatically.
1592 if (this instanceof ClassWriterImpl) {
1593 containing = ((ClassWriterImpl) this).getTypeElement();
1594 } else if (!utils.isPublic(containing)) {
1595 messages.warning(
1596 ch.getDocTreePath(see), "doclet.see.class_or_package_not_accessible",
1597 tagName, utils.getFullyQualifiedName(containing));
1598 } else {
1599 messages.warning(
1600 ch.getDocTreePath(see), "doclet.see.class_or_package_not_found",
1601 tagName, seetext);
1602 }
1603 }
1604 if (configuration.currentTypeElement != containing) {
1605 refMemName = (utils.isConstructor(refMem))
|