1 /* 2 * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 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 29 import javax.lang.model.element.Element; 30 import javax.lang.model.element.TypeElement; 31 import javax.lang.model.element.VariableElement; 32 33 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder; 34 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle; 35 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree; 36 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent; 37 import jdk.javadoc.internal.doclets.formats.html.markup.Table; 38 import jdk.javadoc.internal.doclets.formats.html.markup.TableHeader; 39 import jdk.javadoc.internal.doclets.toolkit.Content; 40 import jdk.javadoc.internal.doclets.toolkit.EnumConstantWriter; 41 import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter; 42 43 /** 44 * Writes enum constant documentation in HTML format. 45 * 46 * <p><b>This is NOT part of any supported API. 47 * If you write code that depends on this, you do so at your own risk. 48 * This code and its internal interfaces are subject to change or 49 * deletion without notice.</b> 50 */ 51 public class EnumConstantWriterImpl extends AbstractMemberWriter 52 implements EnumConstantWriter, MemberSummaryWriter { 53 54 public EnumConstantWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) { 55 super(writer, typeElement); 56 } 57 58 public EnumConstantWriterImpl(SubWriterHolderWriter writer) { 59 super(writer); 60 } 61 62 /** 63 * {@inheritDoc} 64 */ 65 @Override 66 public Content getMemberSummaryHeader(TypeElement typeElement, 67 Content memberSummaryTree) { 68 memberSummaryTree.add(MarkerComments.START_OF_ENUM_CONSTANT_SUMMARY); 69 Content memberTree = new ContentBuilder(); 70 writer.addSummaryHeader(this, typeElement, memberTree); 71 return memberTree; 72 } 73 74 /** 75 * {@inheritDoc} 76 */ 77 @Override 78 public void addMemberTree(Content memberSummaryTree, Content memberTree) { 79 writer.addMemberTree(HtmlStyle.constantsSummary, memberSummaryTree, memberTree); 80 } 81 82 /** 83 * {@inheritDoc} 84 */ 85 @Override 86 public Content getEnumConstantsDetailsTreeHeader(TypeElement typeElement, 87 Content memberDetailsTree) { 88 memberDetailsTree.add(MarkerComments.START_OF_ENUM_CONSTANT_DETAILS); 89 Content enumConstantsDetailsTree = new ContentBuilder(); 90 Content heading = HtmlTree.HEADING(Headings.TypeDeclaration.DETAILS_HEADING, 91 contents.enumConstantDetailLabel); 92 enumConstantsDetailsTree.add(links.createAnchor( 93 SectionName.ENUM_CONSTANT_DETAIL)); 94 enumConstantsDetailsTree.add(heading); 95 return enumConstantsDetailsTree; 96 } 97 98 /** 99 * {@inheritDoc} 100 */ 101 @Override 102 public Content getEnumConstantsTreeHeader(VariableElement enumConstant, 103 Content enumConstantsDetailsTree) { 104 Content enumConstantsTree = new ContentBuilder(); 105 Content heading = new HtmlTree(Headings.TypeDeclaration.MEMBER_HEADING); 106 heading.add(links.createAnchor(name(enumConstant), new StringContent(name(enumConstant)))); 107 enumConstantsTree.add(heading); 108 return HtmlTree.SECTION(HtmlStyle.detail, enumConstantsTree); 109 } 110 111 /** 112 * {@inheritDoc} 113 */ 114 @Override 115 public Content getSignature(VariableElement enumConstant) { 116 return new MemberSignature(enumConstant) 117 .addType(enumConstant.asType()) 118 .toContent(); 119 } 120 121 /** 122 * {@inheritDoc} 123 */ 124 @Override 125 public void addDeprecated(VariableElement enumConstant, Content enumConstantsTree) { 126 addDeprecatedInfo(enumConstant, enumConstantsTree); 127 } 128 129 /** 130 * {@inheritDoc} 131 */ 132 @Override 133 public void addComments(VariableElement enumConstant, Content enumConstantsTree) { 134 addComment(enumConstant, enumConstantsTree); 135 } 136 137 /** 138 * {@inheritDoc} 139 */ 140 @Override 141 public void addTags(VariableElement enumConstant, Content enumConstantsTree) { 142 writer.addTagsInfo(enumConstant, enumConstantsTree); 143 } 144 145 /** 146 * {@inheritDoc} 147 */ 148 @Override 149 public Content getEnumConstantsDetails(Content enumConstantsDetailsTreeHeader, 150 Content enumConstantsDetailsTree) { 151 Content enumConstantsDetails = 152 new ContentBuilder(enumConstantsDetailsTreeHeader, enumConstantsDetailsTree); 153 return getMemberTree(HtmlTree.SECTION(HtmlStyle.constantDetails, enumConstantsDetails)); 154 } 155 156 /** 157 * {@inheritDoc} 158 */ 159 @Override 160 public Content getEnumConstants(Content enumConstantsTree) { 161 return getMemberTree(enumConstantsTree); 162 } 163 164 /** 165 * {@inheritDoc} 166 */ 167 @Override 168 public void addSummaryLabel(Content memberTree) { 169 Content label = HtmlTree.HEADING(Headings.TypeDeclaration.SUMMARY_HEADING, 170 contents.enumConstantSummary); 171 memberTree.add(label); 172 } 173 174 /** 175 * {@inheritDoc} 176 */ 177 @Override 178 public TableHeader getSummaryTableHeader(Element member) { 179 return new TableHeader(contents.enumConstantLabel, contents.descriptionLabel); 180 } 181 182 /** 183 * {@inheritDoc} 184 */ 185 @Override 186 protected Table createSummaryTable() { 187 return new Table(HtmlStyle.memberSummary) 188 .setCaption(contents.getContent("doclet.Enum_Constants")) 189 .setHeader(getSummaryTableHeader(typeElement)) 190 .setColumnStyles(HtmlStyle.colFirst, HtmlStyle.colLast); 191 } 192 193 /** 194 * {@inheritDoc} 195 */ 196 @Override 197 public void addSummaryAnchor(TypeElement typeElement, Content memberTree) { 198 memberTree.add(links.createAnchor(SectionName.ENUM_CONSTANT_SUMMARY)); 199 } 200 201 /** 202 * {@inheritDoc} 203 */ 204 @Override 205 public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) { 206 } 207 208 /** 209 * {@inheritDoc} 210 */ 211 @Override 212 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) { 213 } 214 215 /** 216 * {@inheritDoc} 217 */ 218 @Override 219 protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member, 220 Content tdSummary) { 221 Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink, 222 writer.getDocLink(context, member, name(member), false)); 223 Content code = HtmlTree.CODE(memberLink); 224 tdSummary.add(code); 225 } 226 227 /** 228 * {@inheritDoc} 229 */ 230 @Override 231 protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) { 232 } 233 234 /** 235 * {@inheritDoc} 236 */ 237 @Override 238 protected void addSummaryType(Element member, Content tdSummaryType) { 239 //Not applicable. 240 } 241 242 /** 243 * {@inheritDoc} 244 */ 245 @Override 246 protected Content getDeprecatedLink(Element member) { 247 String name = utils.getFullyQualifiedName(member) + "." + member.getSimpleName(); 248 return writer.getDocLink(LinkInfoImpl.Kind.MEMBER, member, name); 249 } 250 251 @Override 252 public Content getMemberTreeHeader(){ 253 return writer.getMemberTreeHeader(); 254 } 255 }