1 /* 2 * Copyright (c) 2003, 2016, 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 import java.util.ArrayList; 29 import java.util.Arrays; 30 import java.util.List; 31 32 import javax.lang.model.element.Element; 33 import javax.lang.model.element.TypeElement; 34 import javax.lang.model.element.VariableElement; 35 36 import jdk.javadoc.internal.doclets.formats.html.TableHeader; 37 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlAttr; 38 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants; 39 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle; 40 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag; 41 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree; 42 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent; 43 import jdk.javadoc.internal.doclets.toolkit.Content; 44 import jdk.javadoc.internal.doclets.toolkit.EnumConstantWriter; 45 import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter; 46 47 /** 48 * Writes enum constant documentation in HTML format. 49 * 50 * <p><b>This is NOT part of any supported API. 51 * If you write code that depends on this, you do so at your own risk. 52 * This code and its internal interfaces are subject to change or 53 * deletion without notice.</b> 54 * 55 * @author Jamie Ho 56 * @author Bhavesh Patel (Modified) 57 */ 58 public class EnumConstantWriterImpl extends AbstractMemberWriter 59 implements EnumConstantWriter, MemberSummaryWriter { 60 61 public EnumConstantWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) { 62 super(writer, typeElement); 63 } 64 65 public EnumConstantWriterImpl(SubWriterHolderWriter writer) { 66 super(writer); 67 } 68 69 /** 70 * {@inheritDoc} 71 */ 72 @Override 73 public Content getMemberSummaryHeader(TypeElement typeElement, 74 Content memberSummaryTree) { 75 memberSummaryTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_SUMMARY); 76 Content memberTree = writer.getMemberTreeHeader(); 77 writer.addSummaryHeader(this, typeElement, memberTree); 78 return memberTree; 79 } 80 81 /** 82 * {@inheritDoc} 83 */ 84 public void addMemberTree(Content memberSummaryTree, Content memberTree) { 85 writer.addMemberTree(memberSummaryTree, memberTree); 86 } 87 88 /** 89 * {@inheritDoc} 90 */ 91 @Override 92 public Content getEnumConstantsDetailsTreeHeader(TypeElement typeElement, 93 Content memberDetailsTree) { 94 memberDetailsTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_DETAILS); 95 Content enumConstantsDetailsTree = writer.getMemberTreeHeader(); 96 enumConstantsDetailsTree.addContent(writer.getMarkerAnchor( 97 SectionName.ENUM_CONSTANT_DETAIL)); 98 Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING, 99 contents.enumConstantDetailLabel); 100 enumConstantsDetailsTree.addContent(heading); 101 return enumConstantsDetailsTree; 102 } 103 104 /** 105 * {@inheritDoc} 106 */ 107 @Override 108 public Content getEnumConstantsTreeHeader(VariableElement enumConstant, 109 Content enumConstantsDetailsTree) { 110 enumConstantsDetailsTree.addContent( 111 writer.getMarkerAnchor(name(enumConstant))); 112 Content enumConstantsTree = writer.getMemberTreeHeader(); 113 Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING); 114 heading.addContent(name(enumConstant)); 115 enumConstantsTree.addContent(heading); 116 return enumConstantsTree; 117 } 118 119 /** 120 * {@inheritDoc} 121 */ 122 @Override 123 public Content getSignature(VariableElement enumConstant) { 124 Content pre = new HtmlTree(HtmlTag.PRE); 125 writer.addAnnotationInfo(enumConstant, pre); 126 addModifiers(enumConstant, pre); 127 Content enumConstantLink = writer.getLink(new LinkInfoImpl( 128 configuration, LinkInfoImpl.Kind.MEMBER, enumConstant.asType())); 129 pre.addContent(enumConstantLink); 130 pre.addContent(" "); 131 if (configuration.linksource) { 132 Content enumConstantName = new StringContent(name(enumConstant)); 133 writer.addSrcLink(enumConstant, enumConstantName, pre); 134 } else { 135 addName(name(enumConstant), pre); 136 } 137 return pre; 138 } 139 140 /** 141 * {@inheritDoc} 142 */ 143 @Override 144 public void addDeprecated(VariableElement enumConstant, Content enumConstantsTree) { 145 addDeprecatedInfo(enumConstant, enumConstantsTree); 146 } 147 148 /** 149 * {@inheritDoc} 150 */ 151 @Override 152 public void addComments(VariableElement enumConstant, Content enumConstantsTree) { 153 addComment(enumConstant, enumConstantsTree); 154 } 155 156 /** 157 * {@inheritDoc} 158 */ 159 @Override 160 public void addTags(VariableElement enumConstant, Content enumConstantsTree) { 161 writer.addTagsInfo(enumConstant, enumConstantsTree); 162 } 163 164 /** 165 * {@inheritDoc} 166 */ 167 @Override 168 public Content getEnumConstantsDetails(Content enumConstantsDetailsTree) { 169 if (configuration.allowTag(HtmlTag.SECTION)) { 170 HtmlTree htmlTree = HtmlTree.SECTION(getMemberTree(enumConstantsDetailsTree)); 171 return htmlTree; 172 } 173 return getMemberTree(enumConstantsDetailsTree); 174 } 175 176 /** 177 * {@inheritDoc} 178 */ 179 @Override 180 public Content getEnumConstants(Content enumConstantsTree, 181 boolean isLastContent) { 182 return getMemberTree(enumConstantsTree, isLastContent); 183 } 184 185 /** 186 * {@inheritDoc} 187 */ 188 @Override 189 public void addSummaryLabel(Content memberTree) { 190 Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, 191 contents.enumConstantSummary); 192 memberTree.addContent(label); 193 } 194 195 /** 196 * {@inheritDoc} 197 */ 198 @Override 199 public String getTableSummary() { 200 return resources.getText("doclet.Member_Table_Summary", 201 resources.getText("doclet.Enum_Constant_Summary"), 202 resources.getText("doclet.enum_constants")); 203 } 204 205 /** 206 * {@inheritDoc} 207 */ 208 @Override 209 public Content getCaption() { 210 return configuration.getContent("doclet.Enum_Constants"); 211 } 212 213 /** 214 * {@inheritDoc} 215 */ 216 @Override 217 public TableHeader getSummaryTableHeader(Element member) { 218 return new TableHeader(contents.enumConstantLabel, contents.descriptionLabel); 219 } 220 221 /** 222 * {@inheritDoc} 223 */ 224 @Override 225 public void addSummaryAnchor(TypeElement typeElement, Content memberTree) { 226 memberTree.addContent(writer.getMarkerAnchor( 227 SectionName.ENUM_CONSTANT_SUMMARY)); 228 } 229 230 /** 231 * {@inheritDoc} 232 */ 233 @Override 234 public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) { 235 } 236 237 /** 238 * {@inheritDoc} 239 */ 240 @Override 241 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) { 242 } 243 244 /** 245 * {@inheritDoc} 246 */ 247 @Override 248 protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member, 249 Content tdSummary) { 250 Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink, 251 writer.getDocLink(context, member, name(member), false)); 252 Content code = HtmlTree.CODE(memberLink); 253 tdSummary.addContent(code); 254 } 255 256 /** 257 * {@inheritDoc} 258 */ 259 @Override 260 public void setSummaryColumnStyleAndScope(HtmlTree thTree) { 261 thTree.addStyle(HtmlStyle.colFirst); 262 thTree.addAttr(HtmlAttr.SCOPE, "row"); 263 } 264 265 /** 266 * {@inheritDoc} 267 */ 268 @Override 269 protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) { 270 } 271 272 /** 273 * {@inheritDoc} 274 */ 275 @Override 276 protected void addSummaryType(Element member, Content tdSummaryType) { 277 //Not applicable. 278 } 279 280 /** 281 * {@inheritDoc} 282 */ 283 @Override 284 protected Content getDeprecatedLink(Element member) { 285 String name = utils.getFullyQualifiedName(member) + "." + member.getSimpleName(); 286 return writer.getDocLink(LinkInfoImpl.Kind.MEMBER, member, name); 287 } 288 289 /** 290 * {@inheritDoc} 291 */ 292 @Override 293 protected Content getNavSummaryLink(TypeElement typeElement, boolean link) { 294 if (link) { 295 if (typeElement == null) { 296 return writer.getHyperLink(SectionName.ENUM_CONSTANT_SUMMARY, 297 contents.navEnum); 298 } else { 299 return writer.getHyperLink( 300 SectionName.ENUM_CONSTANTS_INHERITANCE, 301 configuration.getClassName(typeElement), contents.navEnum); 302 } 303 } else { 304 return contents.navEnum; 305 } 306 } 307 308 /** 309 * {@inheritDoc} 310 */ 311 @Override 312 protected void addNavDetailLink(boolean link, Content liNav) { 313 if (link) { 314 liNav.addContent(writer.getHyperLink( 315 SectionName.ENUM_CONSTANT_DETAIL, 316 contents.navEnum)); 317 } else { 318 liNav.addContent(contents.navEnum); 319 } 320 } 321 }