PropertyWriterImpl.java revision 2571:10fc81ac75b4
1/* 2 * Copyright (c) 1997, 2014, 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 26package com.sun.tools.doclets.formats.html; 27 28import java.io.*; 29 30import com.sun.javadoc.*; 31import com.sun.tools.doclets.formats.html.markup.*; 32import com.sun.tools.doclets.internal.toolkit.*; 33import com.sun.tools.doclets.internal.toolkit.util.*; 34 35/** 36 * Writes property documentation in HTML format. 37 * 38 * <p><b>This is NOT part of any supported API. 39 * If you write code that depends on this, you do so at your own risk. 40 * This code and its internal interfaces are subject to change or 41 * deletion without notice.</b> 42 * 43 * @author Robert Field 44 * @author Atul M Dambalkar 45 * @author Jamie Ho (rewrite) 46 * @author Bhavesh Patel (Modified) 47 */ 48public class PropertyWriterImpl extends AbstractMemberWriter 49 implements PropertyWriter, MemberSummaryWriter { 50 51 public PropertyWriterImpl(SubWriterHolderWriter writer, ClassDoc classdoc) { 52 super(writer, classdoc); 53 } 54 55 /** 56 * {@inheritDoc} 57 */ 58 public Content getMemberSummaryHeader(ClassDoc classDoc, 59 Content memberSummaryTree) { 60 memberSummaryTree.addContent(HtmlConstants.START_OF_PROPERTY_SUMMARY); 61 Content memberTree = writer.getMemberTreeHeader(); 62 writer.addSummaryHeader(this, classDoc, memberTree); 63 return memberTree; 64 } 65 66 /** 67 * {@inheritDoc} 68 */ 69 public Content getPropertyDetailsTreeHeader(ClassDoc classDoc, 70 Content memberDetailsTree) { 71 memberDetailsTree.addContent(HtmlConstants.START_OF_PROPERTY_DETAILS); 72 Content propertyDetailsTree = writer.getMemberTreeHeader(); 73 propertyDetailsTree.addContent(writer.getMarkerAnchor( 74 SectionName.PROPERTY_DETAIL)); 75 Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING, 76 writer.propertyDetailsLabel); 77 propertyDetailsTree.addContent(heading); 78 return propertyDetailsTree; 79 } 80 81 /** 82 * {@inheritDoc} 83 */ 84 public Content getPropertyDocTreeHeader(MethodDoc property, 85 Content propertyDetailsTree) { 86 propertyDetailsTree.addContent( 87 writer.getMarkerAnchor(property.name())); 88 Content propertyDocTree = writer.getMemberTreeHeader(); 89 Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING); 90 heading.addContent(property.name().substring(0, property.name().lastIndexOf("Property"))); 91 propertyDocTree.addContent(heading); 92 return propertyDocTree; 93 } 94 95 /** 96 * {@inheritDoc} 97 */ 98 public Content getSignature(MethodDoc property) { 99 Content pre = new HtmlTree(HtmlTag.PRE); 100 writer.addAnnotationInfo(property, pre); 101 addModifiers(property, pre); 102 Content propertylink = writer.getLink(new LinkInfoImpl( 103 configuration, LinkInfoImpl.Kind.MEMBER, 104 property.returnType())); 105 pre.addContent(propertylink); 106 pre.addContent(" "); 107 if (configuration.linksource) { 108 Content propertyName = new StringContent(property.name()); 109 writer.addSrcLink(property, propertyName, pre); 110 } else { 111 addName(property.name(), pre); 112 } 113 return pre; 114 } 115 116 /** 117 * {@inheritDoc} 118 */ 119 public void addDeprecated(MethodDoc property, Content propertyDocTree) { 120 } 121 122 /** 123 * {@inheritDoc} 124 */ 125 public void addComments(MethodDoc property, Content propertyDocTree) { 126 ClassDoc holder = property.containingClass(); 127 if (property.inlineTags().length > 0) { 128 if (holder.equals(classdoc) || 129 (! (holder.isPublic() || utils.isLinkable(holder, configuration)))) { 130 writer.addInlineComment(property, propertyDocTree); 131 } else { 132 Content link = 133 writer.getDocLink(LinkInfoImpl.Kind.PROPERTY_DOC_COPY, 134 holder, property, 135 holder.isIncluded() ? 136 holder.typeName() : holder.qualifiedTypeName(), 137 false); 138 Content codeLink = HtmlTree.CODE(link); 139 Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel, holder.isClass()? 140 writer.descfrmClassLabel : writer.descfrmInterfaceLabel); 141 descfrmLabel.addContent(writer.getSpace()); 142 descfrmLabel.addContent(codeLink); 143 propertyDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, descfrmLabel)); 144 writer.addInlineComment(property, propertyDocTree); 145 } 146 } 147 } 148 149 /** 150 * {@inheritDoc} 151 */ 152 public void addTags(MethodDoc property, Content propertyDocTree) { 153 writer.addTagsInfo(property, propertyDocTree); 154 } 155 156 /** 157 * {@inheritDoc} 158 */ 159 public Content getPropertyDetails(Content propertyDetailsTree) { 160 return getMemberTree(propertyDetailsTree); 161 } 162 163 /** 164 * {@inheritDoc} 165 */ 166 public Content getPropertyDoc(Content propertyDocTree, 167 boolean isLastContent) { 168 return getMemberTree(propertyDocTree, isLastContent); 169 } 170 171 /** 172 * Close the writer. 173 */ 174 public void close() throws IOException { 175 writer.close(); 176 } 177 178 public int getMemberKind() { 179 return VisibleMemberMap.PROPERTIES; 180 } 181 182 /** 183 * {@inheritDoc} 184 */ 185 public void addSummaryLabel(Content memberTree) { 186 Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, 187 writer.getResource("doclet.Property_Summary")); 188 memberTree.addContent(label); 189 } 190 191 /** 192 * {@inheritDoc} 193 */ 194 public String getTableSummary() { 195 return configuration.getText("doclet.Member_Table_Summary", 196 configuration.getText("doclet.Property_Summary"), 197 configuration.getText("doclet.properties")); 198 } 199 200 /** 201 * {@inheritDoc} 202 */ 203 public Content getCaption() { 204 return configuration.getResource("doclet.Properties"); 205 } 206 207 /** 208 * {@inheritDoc} 209 */ 210 public String[] getSummaryTableHeader(ProgramElementDoc member) { 211 String[] header = new String[] { 212 configuration.getText("doclet.Type"), 213 configuration.getText("doclet.0_and_1", 214 configuration.getText("doclet.Property"), 215 configuration.getText("doclet.Description")) 216 }; 217 return header; 218 } 219 220 /** 221 * {@inheritDoc} 222 */ 223 public void addSummaryAnchor(ClassDoc cd, Content memberTree) { 224 memberTree.addContent(writer.getMarkerAnchor( 225 SectionName.PROPERTY_SUMMARY)); 226 } 227 228 /** 229 * {@inheritDoc} 230 */ 231 public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) { 232 inheritedTree.addContent(writer.getMarkerAnchor( 233 SectionName.PROPERTIES_INHERITANCE, 234 configuration.getClassName(cd))); 235 } 236 237 /** 238 * {@inheritDoc} 239 */ 240 public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) { 241 Content classLink = writer.getPreQualifiedClassLink( 242 LinkInfoImpl.Kind.MEMBER, cd, false); 243 Content label = new StringContent(cd.isClass() ? 244 configuration.getText("doclet.Properties_Inherited_From_Class") : 245 configuration.getText("doclet.Properties_Inherited_From_Interface")); 246 Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING, 247 label); 248 labelHeading.addContent(writer.getSpace()); 249 labelHeading.addContent(classLink); 250 inheritedTree.addContent(labelHeading); 251 } 252 253 /** 254 * {@inheritDoc} 255 */ 256 protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member, 257 Content tdSummary) { 258 Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink, 259 writer.getDocLink(context, cd, 260 (MemberDoc) member, 261 member.name().substring(0, member.name().lastIndexOf("Property")), 262 false, 263 true)); 264 265 Content code = HtmlTree.CODE(memberLink); 266 tdSummary.addContent(code); 267 } 268 269 /** 270 * {@inheritDoc} 271 */ 272 protected void addInheritedSummaryLink(ClassDoc cd, 273 ProgramElementDoc member, Content linksTree) { 274 linksTree.addContent( 275 writer.getDocLink(LinkInfoImpl.Kind.MEMBER, cd, (MemberDoc)member, 276 ((member.name().lastIndexOf("Property") != -1) && configuration.javafx) 277 ? member.name().substring(0, member.name().length() - "Property".length()) 278 : member.name(), 279 false, true)); 280 } 281 282 /** 283 * {@inheritDoc} 284 */ 285 protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) { 286 MethodDoc property = (MethodDoc)member; 287 addModifierAndType(property, property.returnType(), tdSummaryType); 288 } 289 290 /** 291 * {@inheritDoc} 292 */ 293 protected Content getDeprecatedLink(ProgramElementDoc member) { 294 return writer.getDocLink(LinkInfoImpl.Kind.MEMBER, 295 (MemberDoc) member, ((MethodDoc)member).qualifiedName()); 296 } 297 298 /** 299 * {@inheritDoc} 300 */ 301 protected Content getNavSummaryLink(ClassDoc cd, boolean link) { 302 if (link) { 303 if (cd == null) { 304 return writer.getHyperLink( 305 SectionName.PROPERTY_SUMMARY, 306 writer.getResource("doclet.navProperty")); 307 } else { 308 return writer.getHyperLink( 309 SectionName.PROPERTIES_INHERITANCE, 310 configuration.getClassName(cd), writer.getResource("doclet.navProperty")); 311 } 312 } else { 313 return writer.getResource("doclet.navProperty"); 314 } 315 } 316 317 /** 318 * {@inheritDoc} 319 */ 320 protected void addNavDetailLink(boolean link, Content liNav) { 321 if (link) { 322 liNav.addContent(writer.getHyperLink( 323 SectionName.PROPERTY_DETAIL, 324 writer.getResource("doclet.navProperty"))); 325 } else { 326 liNav.addContent(writer.getResource("doclet.navProperty")); 327 } 328 } 329} 330