FieldWriterImpl.java revision 3692:87b48a8fb3cf
128021Sjoerg/* 272406Sphantom * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. 328021Sjoerg * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 428021Sjoerg * 528021Sjoerg * This code is free software; you can redistribute it and/or modify it 628021Sjoerg * under the terms of the GNU General Public License version 2 only, as 728021Sjoerg * published by the Free Software Foundation. Oracle designates this 828021Sjoerg * particular file as subject to the "Classpath" exception as provided 928021Sjoerg * by Oracle in the LICENSE file that accompanied this code. 1028021Sjoerg * 1128021Sjoerg * This code is distributed in the hope that it will be useful, but WITHOUT 1228021Sjoerg * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1328021Sjoerg * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1428021Sjoerg * version 2 for more details (a copy is included in the LICENSE file that 1528021Sjoerg * accompanied this code). 1628021Sjoerg * 1728021Sjoerg * You should have received a copy of the GNU General Public License version 1828021Sjoerg * 2 along with this work; if not, write to the Free Software Foundation, 1928021Sjoerg * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2028021Sjoerg * 2128021Sjoerg * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2228021Sjoerg * or visit www.oracle.com if you need additional information or have any 2328021Sjoerg * questions. 2428021Sjoerg */ 2528021Sjoerg 2628021Sjoergpackage jdk.javadoc.internal.doclets.formats.html; 2750476Speter 2828021Sjoergimport java.util.Arrays; 2928021Sjoergimport java.util.List; 3073359Sache 3173359Sacheimport javax.lang.model.element.Element; 3272406Sphantomimport javax.lang.model.element.TypeElement; 3328021Sjoergimport javax.lang.model.element.VariableElement; 3428021Sjoerg 3572406Sphantomimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants; 3672167Sphantomimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle; 3772406Sphantomimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag; 3828021Sjoergimport jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree; 3974412Sacheimport jdk.javadoc.internal.doclets.formats.html.markup.StringContent; 4051186Sdtimport jdk.javadoc.internal.doclets.toolkit.Content; 4172167Sphantomimport jdk.javadoc.internal.doclets.toolkit.FieldWriter; 4228021Sjoergimport jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter; 4328021Sjoerg 4428021Sjoerg/** 4528021Sjoerg * Writes field documentation in HTML format. 4628021Sjoerg * 4728021Sjoerg * <p><b>This is NOT part of any supported API. 4828021Sjoerg * If you write code that depends on this, you do so at your own risk. 4928021Sjoerg * This code and its internal interfaces are subject to change or 5028021Sjoerg * deletion without notice.</b> 5128021Sjoerg * 5228021Sjoerg * @author Robert Field 5328021Sjoerg * @author Atul M Dambalkar 5428021Sjoerg * @author Jamie Ho (rewrite) 5528021Sjoerg * @author Bhavesh Patel (Modified) 5628021Sjoerg */ 5728021Sjoergpublic class FieldWriterImpl extends AbstractMemberWriter 5828021Sjoerg implements FieldWriter, MemberSummaryWriter { 5928021Sjoerg 6028021Sjoerg public FieldWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) { 6128021Sjoerg super(writer, typeElement); 6228021Sjoerg } 6328021Sjoerg 6428021Sjoerg public FieldWriterImpl(SubWriterHolderWriter writer) { 6528021Sjoerg super(writer); 6628021Sjoerg } 6728021Sjoerg 6828021Sjoerg /** 6928021Sjoerg * {@inheritDoc} 7028021Sjoerg */ 7174412Sache @Override 7228021Sjoerg public Content getMemberSummaryHeader(TypeElement typeElement, 7328021Sjoerg Content memberSummaryTree) { 7428021Sjoerg memberSummaryTree.addContent(HtmlConstants.START_OF_FIELD_SUMMARY); 7528021Sjoerg Content memberTree = writer.getMemberTreeHeader(); 7628021Sjoerg writer.addSummaryHeader(this, typeElement, memberTree); 7728021Sjoerg return memberTree; 7828021Sjoerg } 7928021Sjoerg 8074412Sache /** 8151186Sdt * {@inheritDoc} 8274412Sache */ 8374412Sache public void addMemberTree(Content memberSummaryTree, Content memberTree) { 8474412Sache writer.addMemberTree(memberSummaryTree, memberTree); 8551186Sdt } 8651186Sdt 8751186Sdt /** 8853940Sache * {@inheritDoc} 8953940Sache */ 9074412Sache @Override 9174412Sache public Content getFieldDetailsTreeHeader(TypeElement typeElement, Content memberDetailsTree) { 9253940Sache memberDetailsTree.addContent(HtmlConstants.START_OF_FIELD_DETAILS); 9374412Sache Content fieldDetailsTree = writer.getMemberTreeHeader(); 9453960Sache fieldDetailsTree.addContent(writer.getMarkerAnchor( 9573359Sache SectionName.FIELD_DETAIL)); 9673359Sache Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING, 9773359Sache contents.fieldDetailsLabel); 9873359Sache fieldDetailsTree.addContent(heading); 9928021Sjoerg return fieldDetailsTree; 10028021Sjoerg } 10172167Sphantom 10272167Sphantom /** 10372167Sphantom * {@inheritDoc} 10472406Sphantom */ 10572167Sphantom @Override 10672167Sphantom public Content getFieldDocTreeHeader(VariableElement field, Content fieldDetailsTree) { 10728021Sjoerg fieldDetailsTree.addContent(writer.getMarkerAnchor(name(field))); 10828021Sjoerg Content fieldTree = writer.getMemberTreeHeader(); 10972406Sphantom Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING); 11028021Sjoerg heading.addContent(name(field)); 11172406Sphantom fieldTree.addContent(heading); 11228021Sjoerg return fieldTree; 11372406Sphantom } 11473359Sache 11574412Sache /** 11672406Sphantom * {@inheritDoc} 11728021Sjoerg */ 11872406Sphantom @Override 11951186Sdt public Content getSignature(VariableElement field) { 120 Content pre = new HtmlTree(HtmlTag.PRE); 121 writer.addAnnotationInfo(field, pre); 122 addModifiers(field, pre); 123 Content fieldlink = writer.getLink(new LinkInfoImpl( 124 configuration, LinkInfoImpl.Kind.MEMBER, field.asType())); 125 pre.addContent(fieldlink); 126 pre.addContent(" "); 127 if (configuration.linksource) { 128 Content fieldName = new StringContent(name(field)); 129 writer.addSrcLink(field, fieldName, pre); 130 } else { 131 addName(name(field), pre); 132 } 133 return pre; 134 } 135 136 /** 137 * {@inheritDoc} 138 */ 139 @Override 140 public void addDeprecated(VariableElement field, Content fieldTree) { 141 addDeprecatedInfo(field, fieldTree); 142 } 143 144 /** 145 * {@inheritDoc} 146 */ 147 @Override 148 public void addComments(VariableElement field, Content fieldTree) { 149 if (!utils.getFullBody(field).isEmpty()) { 150 writer.addInlineComment(field, fieldTree); 151 } 152 } 153 154 /** 155 * {@inheritDoc} 156 */ 157 @Override 158 public void addTags(VariableElement field, Content fieldTree) { 159 writer.addTagsInfo(field, fieldTree); 160 } 161 162 /** 163 * {@inheritDoc} 164 */ 165 @Override 166 public Content getFieldDetails(Content fieldDetailsTree) { 167 if (configuration.allowTag(HtmlTag.SECTION)) { 168 HtmlTree htmlTree = HtmlTree.SECTION(getMemberTree(fieldDetailsTree)); 169 return htmlTree; 170 } 171 return getMemberTree(fieldDetailsTree); 172 } 173 174 /** 175 * {@inheritDoc} 176 */ 177 @Override 178 public Content getFieldDoc(Content fieldTree, 179 boolean isLastContent) { 180 return getMemberTree(fieldTree, isLastContent); 181 } 182 183 /** 184 * {@inheritDoc} 185 */ 186 @Override 187 public void addSummaryLabel(Content memberTree) { 188 Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, 189 contents.fieldSummaryLabel); 190 memberTree.addContent(label); 191 } 192 193 /** 194 * {@inheritDoc} 195 */ 196 @Override 197 public String getTableSummary() { 198 return resources.getText("doclet.Member_Table_Summary", 199 resources.getText("doclet.Field_Summary"), 200 resources.getText("doclet.fields")); 201 } 202 203 /** 204 * {@inheritDoc} 205 */ 206 @Override 207 public Content getCaption() { 208 return contents.fields; 209 } 210 211 /** 212 * {@inheritDoc} 213 */ 214 @Override 215 public List<String> getSummaryTableHeader(Element member) { 216 List<String> header = Arrays.asList(writer.getModifierTypeHeader(), 217 resources.getText("doclet.Field"), resources.getText("doclet.Description")); 218 return header; 219 } 220 221 /** 222 * {@inheritDoc} 223 */ 224 @Override 225 public void addSummaryAnchor(TypeElement typeElement, Content memberTree) { 226 memberTree.addContent(writer.getMarkerAnchor( 227 SectionName.FIELD_SUMMARY)); 228 } 229 230 /** 231 * {@inheritDoc} 232 */ 233 @Override 234 public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) { 235 inheritedTree.addContent(writer.getMarkerAnchor( 236 SectionName.FIELDS_INHERITANCE, configuration.getClassName(typeElement))); 237 } 238 239 /** 240 * {@inheritDoc} 241 */ 242 @Override 243 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) { 244 Content classLink = writer.getPreQualifiedClassLink( 245 LinkInfoImpl.Kind.MEMBER, typeElement, false); 246 Content label = new StringContent(utils.isClass(typeElement) 247 ? configuration.getText("doclet.Fields_Inherited_From_Class") 248 : configuration.getText("doclet.Fields_Inherited_From_Interface")); 249 Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING, 250 label); 251 labelHeading.addContent(Contents.SPACE); 252 labelHeading.addContent(classLink); 253 inheritedTree.addContent(labelHeading); 254 } 255 256 /** 257 * {@inheritDoc} 258 */ 259 @Override 260 protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member, 261 Content tdSummary) { 262 Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink, 263 writer.getDocLink(context, typeElement , member, name(member), false)); 264 Content code = HtmlTree.CODE(memberLink); 265 tdSummary.addContent(code); 266 } 267 268 /** 269 * {@inheritDoc} 270 */ 271 @Override 272 protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) { 273 linksTree.addContent( 274 writer.getDocLink(LinkInfoImpl.Kind.MEMBER, typeElement, member, 275 name(member), false)); 276 } 277 278 /** 279 * {@inheritDoc} 280 */ 281 @Override 282 protected void addSummaryType(Element member, Content tdSummaryType) { 283 addModifierAndType(member, member.asType(), tdSummaryType); 284 } 285 286 /** 287 * {@inheritDoc} 288 */ 289 @Override 290 protected Content getDeprecatedLink(Element member) { 291 String name = utils.getFullyQualifiedName(member) + "." + member.getSimpleName(); 292 return writer.getDocLink(LinkInfoImpl.Kind.MEMBER, member, name); 293 } 294 295 /** 296 * {@inheritDoc} 297 */ 298 @Override 299 protected Content getNavSummaryLink(TypeElement typeElement, boolean link) { 300 if (link) { 301 if (typeElement == null) { 302 return writer.getHyperLink( 303 SectionName.FIELD_SUMMARY, 304 contents.navField); 305 } else { 306 return writer.getHyperLink( 307 SectionName.FIELDS_INHERITANCE, 308 configuration.getClassName(typeElement), contents.navField); 309 } 310 } else { 311 return contents.navField; 312 } 313 } 314 315 /** 316 * {@inheritDoc} 317 */ 318 @Override 319 protected void addNavDetailLink(boolean link, Content liNav) { 320 if (link) { 321 liNav.addContent(writer.getHyperLink( 322 SectionName.FIELD_DETAIL, 323 contents.navField)); 324 } else { 325 liNav.addContent(contents.navField); 326 } 327 } 328} 329