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, 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, 80 SectionName.ENUM_CONSTANT_SUMMARY, memberSummaryTree, memberTree); 81 } 82 83 /** 84 * {@inheritDoc} 85 */ 86 @Override 87 public Content getEnumConstantsDetailsTreeHeader(TypeElement typeElement, 88 Content memberDetailsTree) { 89 memberDetailsTree.add(MarkerComments.START_OF_ENUM_CONSTANT_DETAILS); 90 Content enumConstantsDetailsTree = new ContentBuilder(); 91 Content heading = HtmlTree.HEADING(Headings.TypeDeclaration.DETAILS_HEADING, 92 contents.enumConstantDetailLabel); 93 enumConstantsDetailsTree.add(heading); 94 return enumConstantsDetailsTree; 95 } 96 97 /** 98 * {@inheritDoc} 99 */ 100 @Override 101 public Content getEnumConstantsTreeHeader(VariableElement enumConstant, 102 Content enumConstantsDetailsTree) { 103 Content enumConstantsTree = new ContentBuilder(); 104 HtmlTree heading = new HtmlTree(Headings.TypeDeclaration.MEMBER_HEADING, 105 new StringContent(name(enumConstant))); 106 enumConstantsTree.add(heading); 107 return HtmlTree.SECTION(HtmlStyle.detail, enumConstantsTree) 108 .setId(name(enumConstant)); 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 .setId(SectionName.ENUM_CONSTANT_DETAIL.getName())); 155 } 156 157 /** 158 * {@inheritDoc} 159 */ 160 @Override 161 public Content getEnumConstants(Content enumConstantsTree) { 162 return getMemberTree(enumConstantsTree); 163 } 164 165 /** 166 * {@inheritDoc} 167 */ 168 @Override 169 public void addSummaryLabel(Content memberTree) { 170 Content label = HtmlTree.HEADING(Headings.TypeDeclaration.SUMMARY_HEADING, 171 contents.enumConstantSummary); 172 memberTree.add(label); 173 } 174 175 /** 176 * {@inheritDoc} 177 */ 178 @Override 179 public TableHeader getSummaryTableHeader(Element member) { 180 return new TableHeader(contents.enumConstantLabel, contents.descriptionLabel); 181 } 182 183 /** 184 * {@inheritDoc} 185 */ 186 @Override 187 protected Table createSummaryTable() { 188 return new Table(HtmlStyle.memberSummary) 189 .setCaption(contents.getContent("doclet.Enum_Constants")) 190 .setHeader(getSummaryTableHeader(typeElement)) 191 .setColumnStyles(HtmlStyle.colFirst, HtmlStyle.colLast); 192 } 193 194 /** 195 * {@inheritDoc} 196 */ 197 @Override 198 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) { 199 } 200 201 /** 202 * {@inheritDoc} 203 */ 204 @Override 205 protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member, 206 Content tdSummary) { 207 Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink, 208 writer.getDocLink(context, member, name(member), false)); 209 Content code = HtmlTree.CODE(memberLink); 210 tdSummary.add(code); 211 } 212 213 /** 214 * {@inheritDoc} 215 */ 216 @Override 217 protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) { 218 } 219 220 /** 221 * {@inheritDoc} 222 */ 223 @Override 224 protected void addSummaryType(Element member, Content tdSummaryType) { 225 //Not applicable. 226 } 227 228 /** 229 * {@inheritDoc} 230 */ 231 @Override 232 protected Content getDeprecatedLink(Element member) { 233 String name = utils.getFullyQualifiedName(member) + "." + member.getSimpleName(); 234 return writer.getDocLink(LinkInfoImpl.Kind.MEMBER, member, name); 235 } 236 237 @Override 238 public Content getMemberTreeHeader(){ 239 return writer.getMemberTreeHeader(); 240 } 241 }