66 public MethodWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) {
67 super(writer, typeElement);
68 }
69
70 /**
71 * Construct a new MethodWriterImpl.
72 *
73 * @param writer The writer for the class that the methods belong to.
74 */
75 public MethodWriterImpl(SubWriterHolderWriter writer) {
76 super(writer);
77 }
78
79 /**
80 * {@inheritDoc}
81 */
82 @Override
83 public Content getMemberSummaryHeader(TypeElement typeElement, Content memberSummaryTree) {
84 memberSummaryTree.add(MarkerComments.START_OF_METHOD_SUMMARY);
85 Content memberTree = new ContentBuilder();
86 writer.addSummaryHeader(this, typeElement, memberTree);
87 return memberTree;
88 }
89
90 /**
91 * {@inheritDoc}
92 */
93 @Override
94 public void addMemberTree(Content memberSummaryTree, Content memberTree) {
95 writer.addMemberTree(HtmlStyle.methodSummary, memberSummaryTree, memberTree);
96 }
97
98 /**
99 * {@inheritDoc}
100 */
101 @Override
102 public Content getMethodDetailsTreeHeader(TypeElement typeElement, Content memberDetailsTree) {
103 memberDetailsTree.add(MarkerComments.START_OF_METHOD_DETAILS);
104 Content methodDetailsTree = new ContentBuilder();
105 Content heading = HtmlTree.HEADING(Headings.TypeDeclaration.DETAILS_HEADING,
106 contents.methodDetailLabel);
107 methodDetailsTree.add(links.createAnchor(SectionName.METHOD_DETAIL));
108 methodDetailsTree.add(heading);
109 return methodDetailsTree;
110 }
111
112 /**
113 * {@inheritDoc}
114 */
115 @Override
116 public Content getMethodDocTreeHeader(ExecutableElement method, Content methodDetailsTree) {
117 String erasureAnchor;
118 Content methodDocTree = new ContentBuilder();
119 Content heading = new HtmlTree(Headings.TypeDeclaration.MEMBER_HEADING);
120 if ((erasureAnchor = getErasureAnchor(method)) != null) {
121 heading.add(links.createAnchor((erasureAnchor)));
122 }
123 heading.add(links.createAnchor(writer.getAnchor(method), new StringContent(name(method))));
124 methodDocTree.add(heading);
125 return HtmlTree.SECTION(HtmlStyle.detail, methodDocTree);
126 }
127
128 /**
129 * Get the signature for the given method.
130 *
131 * @param method the method being documented.
132 * @return a content object for the signature
133 */
134 @Override
135 public Content getSignature(ExecutableElement method) {
136 return new MemberSignature(method)
137 .addTypeParameters(getTypeParameters(method))
138 .addReturnType(getReturnType(method))
139 .addParameters(getParameters(method, true))
140 .addExceptions(getExceptions(method))
141 .toContent();
142 }
143
144 /**
145 * {@inheritDoc}
178 methodDocTree.add(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
179 writer.addInlineComment(method, methodDocTree);
180 }
181 }
182 }
183
184 /**
185 * {@inheritDoc}
186 */
187 @Override
188 public void addTags(ExecutableElement method, Content methodDocTree) {
189 writer.addTagsInfo(method, methodDocTree);
190 }
191
192 /**
193 * {@inheritDoc}
194 */
195 @Override
196 public Content getMethodDetails(Content methodDetailsTreeHeader, Content methodDetailsTree) {
197 Content methodDetails = new ContentBuilder(methodDetailsTreeHeader, methodDetailsTree);
198 return getMemberTree(HtmlTree.SECTION(HtmlStyle.methodDetails, methodDetails));
199 }
200
201 /**
202 * {@inheritDoc}
203 */
204 @Override
205 public Content getMethodDoc(Content methodDocTree) {
206 return getMemberTree(methodDocTree);
207 }
208
209 /**
210 * {@inheritDoc}
211 */
212 @Override
213 public void addSummaryLabel(Content memberTree) {
214 Content label = HtmlTree.HEADING(Headings.TypeDeclaration.SUMMARY_HEADING,
215 contents.methodSummary);
216 memberTree.add(label);
217 }
218
230 return new Table(HtmlStyle.memberSummary)
231 .setHeader(getSummaryTableHeader(typeElement))
232 .setRowScopeColumn(1)
233 .setColumnStyles(HtmlStyle.colFirst, HtmlStyle.colSecond, HtmlStyle.colLast)
234 .setDefaultTab(resources.getText("doclet.All_Methods"))
235 .addTab(resources.getText("doclet.Static_Methods"), utils::isStatic)
236 .addTab(resources.getText("doclet.Instance_Methods"), e -> !utils.isStatic(e))
237 .addTab(resources.getText("doclet.Abstract_Methods"), utils::isAbstract)
238 .addTab(resources.getText("doclet.Concrete_Methods"),
239 e -> !utils.isAbstract(e) && !utils.isInterface(e.getEnclosingElement()))
240 .addTab(resources.getText("doclet.Default_Methods"), utils::isDefault)
241 .addTab(resources.getText("doclet.Deprecated_Methods"),
242 e -> utils.isDeprecated(e) || utils.isDeprecated(typeElement))
243 .setTabScript(i -> "show(" + i + ");");
244 }
245
246 /**
247 * {@inheritDoc}
248 */
249 @Override
250 public void addSummaryAnchor(TypeElement typeElement, Content memberTree) {
251 memberTree.add(links.createAnchor(SectionName.METHOD_SUMMARY));
252 }
253
254 /**
255 * {@inheritDoc}
256 */
257 @Override
258 public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) {
259 inheritedTree.add(links.createAnchor(
260 SectionName.METHODS_INHERITANCE, configuration.getClassName(typeElement)));
261 }
262
263 /**
264 * {@inheritDoc}
265 */
266 @Override
267 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) {
268 Content classLink = writer.getPreQualifiedClassLink(
269 LinkInfoImpl.Kind.MEMBER, typeElement, false);
270 Content label;
271 if (configuration.summarizeOverriddenMethods) {
272 label = new StringContent(utils.isClass(typeElement)
273 ? resources.getText("doclet.Methods_Declared_In_Class")
274 : resources.getText("doclet.Methods_Declared_In_Interface"));
275 } else {
276 label = new StringContent(utils.isClass(typeElement)
277 ? resources.getText("doclet.Methods_Inherited_From_Class")
278 : resources.getText("doclet.Methods_Inherited_From_Interface"));
279 }
280 Content labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.INHERITED_SUMMARY_HEADING,
281 label);
282 labelHeading.add(Entity.NO_BREAK_SPACE);
283 labelHeading.add(classLink);
284 inheritedTree.add(labelHeading);
285 }
286
287 /**
288 * {@inheritDoc}
289 */
290 @Override
291 protected void addSummaryType(Element member, Content tdSummaryType) {
292 ExecutableElement meth = (ExecutableElement)member;
293 addModifierAndType(meth, utils.getReturnType(meth), tdSummaryType);
294 }
295
296 /**
297 * {@inheritDoc}
298 */
299 protected static void addOverridden(HtmlDocletWriter writer,
300 TypeMirror overriddenType, ExecutableElement method, Content dl) {
301 if (writer.configuration.nocomment) {
313 //The class is included but the method is not. That means that it
314 //is not visible so don't document this.
315 return;
316 }
317 Content label = contents.overridesLabel;
318 LinkInfoImpl.Kind context = LinkInfoImpl.Kind.METHOD_OVERRIDES;
319
320 if (method != null) {
321 if (utils.isAbstract(holder) && utils.isAbstract(method)){
322 //Abstract method is implemented from abstract class,
323 //not overridden
324 label = contents.specifiedByLabel;
325 context = LinkInfoImpl.Kind.METHOD_SPECIFIED_BY;
326 }
327 Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.overrideSpecifyLabel, label));
328 dl.add(dt);
329 Content overriddenTypeLink =
330 writer.getLink(new LinkInfoImpl(writer.configuration, context, overriddenType));
331 Content codeOverriddenTypeLink = HtmlTree.CODE(overriddenTypeLink);
332 Content methlink = writer.getLink(
333 new LinkInfoImpl(writer.configuration, LinkInfoImpl.Kind.MEMBER,
334 holder)
335 .where(writer.links.getName(writer.getAnchor(method))).label(method.getSimpleName()));
336 Content codeMethLink = HtmlTree.CODE(methlink);
337 Content dd = HtmlTree.DD(codeMethLink);
338 dd.add(Entity.NO_BREAK_SPACE);
339 dd.add(writer.contents.inClass);
340 dd.add(Entity.NO_BREAK_SPACE);
341 dd.add(codeOverriddenTypeLink);
342 dl.add(dd);
343 }
344 }
345
346 /**
347 * {@inheritDoc}
348 */
349 protected static void addImplementsInfo(HtmlDocletWriter writer,
350 ExecutableElement method, Content dl) {
351 Utils utils = writer.utils;
352 if (utils.isStatic(method) || writer.configuration.nocomment) {
353 return;
354 }
355 Contents contents = writer.contents;
|
66 public MethodWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) {
67 super(writer, typeElement);
68 }
69
70 /**
71 * Construct a new MethodWriterImpl.
72 *
73 * @param writer The writer for the class that the methods belong to.
74 */
75 public MethodWriterImpl(SubWriterHolderWriter writer) {
76 super(writer);
77 }
78
79 /**
80 * {@inheritDoc}
81 */
82 @Override
83 public Content getMemberSummaryHeader(TypeElement typeElement, Content memberSummaryTree) {
84 memberSummaryTree.add(MarkerComments.START_OF_METHOD_SUMMARY);
85 Content memberTree = new ContentBuilder();
86 writer.addSummaryHeader(this, memberTree);
87 return memberTree;
88 }
89
90 /**
91 * {@inheritDoc}
92 */
93 @Override
94 public void addMemberTree(Content memberSummaryTree, Content memberTree) {
95 writer.addMemberTree(HtmlStyle.methodSummary,
96 SectionName.METHOD_SUMMARY, memberSummaryTree, memberTree);
97 }
98
99 /**
100 * {@inheritDoc}
101 */
102 @Override
103 public Content getMethodDetailsTreeHeader(Content memberDetailsTree) {
104 memberDetailsTree.add(MarkerComments.START_OF_METHOD_DETAILS);
105 Content methodDetailsTree = new ContentBuilder();
106 Content heading = HtmlTree.HEADING(Headings.TypeDeclaration.DETAILS_HEADING,
107 contents.methodDetailLabel);
108 methodDetailsTree.add(heading);
109 return methodDetailsTree;
110 }
111
112 /**
113 * {@inheritDoc}
114 */
115 @Override
116 public Content getMethodDocTreeHeader(ExecutableElement method) {
117 String erasureAnchor;
118 Content methodDocTree = new ContentBuilder();
119 HtmlTree heading = new HtmlTree(Headings.TypeDeclaration.MEMBER_HEADING,
120 new StringContent(name(method)));
121 if ((erasureAnchor = getErasureAnchor(method)) != null) {
122 heading.setId(erasureAnchor);
123 }
124 methodDocTree.add(heading);
125 return HtmlTree.SECTION(HtmlStyle.detail, methodDocTree)
126 .setId(links.getName(writer.getAnchor(method)));
127 }
128
129 /**
130 * Get the signature for the given method.
131 *
132 * @param method the method being documented.
133 * @return a content object for the signature
134 */
135 @Override
136 public Content getSignature(ExecutableElement method) {
137 return new MemberSignature(method)
138 .addTypeParameters(getTypeParameters(method))
139 .addReturnType(getReturnType(method))
140 .addParameters(getParameters(method, true))
141 .addExceptions(getExceptions(method))
142 .toContent();
143 }
144
145 /**
146 * {@inheritDoc}
179 methodDocTree.add(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
180 writer.addInlineComment(method, methodDocTree);
181 }
182 }
183 }
184
185 /**
186 * {@inheritDoc}
187 */
188 @Override
189 public void addTags(ExecutableElement method, Content methodDocTree) {
190 writer.addTagsInfo(method, methodDocTree);
191 }
192
193 /**
194 * {@inheritDoc}
195 */
196 @Override
197 public Content getMethodDetails(Content methodDetailsTreeHeader, Content methodDetailsTree) {
198 Content methodDetails = new ContentBuilder(methodDetailsTreeHeader, methodDetailsTree);
199 return getMemberTree(HtmlTree.SECTION(HtmlStyle.methodDetails, methodDetails)
200 .setId(SectionName.METHOD_DETAIL.getName()));
201 }
202
203 /**
204 * {@inheritDoc}
205 */
206 @Override
207 public Content getMethodDoc(Content methodDocTree) {
208 return getMemberTree(methodDocTree);
209 }
210
211 /**
212 * {@inheritDoc}
213 */
214 @Override
215 public void addSummaryLabel(Content memberTree) {
216 Content label = HtmlTree.HEADING(Headings.TypeDeclaration.SUMMARY_HEADING,
217 contents.methodSummary);
218 memberTree.add(label);
219 }
220
232 return new Table(HtmlStyle.memberSummary)
233 .setHeader(getSummaryTableHeader(typeElement))
234 .setRowScopeColumn(1)
235 .setColumnStyles(HtmlStyle.colFirst, HtmlStyle.colSecond, HtmlStyle.colLast)
236 .setDefaultTab(resources.getText("doclet.All_Methods"))
237 .addTab(resources.getText("doclet.Static_Methods"), utils::isStatic)
238 .addTab(resources.getText("doclet.Instance_Methods"), e -> !utils.isStatic(e))
239 .addTab(resources.getText("doclet.Abstract_Methods"), utils::isAbstract)
240 .addTab(resources.getText("doclet.Concrete_Methods"),
241 e -> !utils.isAbstract(e) && !utils.isInterface(e.getEnclosingElement()))
242 .addTab(resources.getText("doclet.Default_Methods"), utils::isDefault)
243 .addTab(resources.getText("doclet.Deprecated_Methods"),
244 e -> utils.isDeprecated(e) || utils.isDeprecated(typeElement))
245 .setTabScript(i -> "show(" + i + ");");
246 }
247
248 /**
249 * {@inheritDoc}
250 */
251 @Override
252 public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) {
253 Content classLink = writer.getPreQualifiedClassLink(
254 LinkInfoImpl.Kind.MEMBER, typeElement, false);
255 Content label;
256 if (configuration.summarizeOverriddenMethods) {
257 label = new StringContent(utils.isClass(typeElement)
258 ? resources.getText("doclet.Methods_Declared_In_Class")
259 : resources.getText("doclet.Methods_Declared_In_Interface"));
260 } else {
261 label = new StringContent(utils.isClass(typeElement)
262 ? resources.getText("doclet.Methods_Inherited_From_Class")
263 : resources.getText("doclet.Methods_Inherited_From_Interface"));
264 }
265 HtmlTree labelHeading = HtmlTree.HEADING(Headings.TypeDeclaration.INHERITED_SUMMARY_HEADING,
266 label);
267 labelHeading.setId(SectionName.METHODS_INHERITANCE.getName()
268 + links.getName(configuration.getClassName(typeElement)));
269 labelHeading.add(Entity.NO_BREAK_SPACE);
270 labelHeading.add(classLink);
271 inheritedTree.add(labelHeading);
272 }
273
274 /**
275 * {@inheritDoc}
276 */
277 @Override
278 protected void addSummaryType(Element member, Content tdSummaryType) {
279 ExecutableElement meth = (ExecutableElement)member;
280 addModifierAndType(meth, utils.getReturnType(meth), tdSummaryType);
281 }
282
283 /**
284 * {@inheritDoc}
285 */
286 protected static void addOverridden(HtmlDocletWriter writer,
287 TypeMirror overriddenType, ExecutableElement method, Content dl) {
288 if (writer.configuration.nocomment) {
300 //The class is included but the method is not. That means that it
301 //is not visible so don't document this.
302 return;
303 }
304 Content label = contents.overridesLabel;
305 LinkInfoImpl.Kind context = LinkInfoImpl.Kind.METHOD_OVERRIDES;
306
307 if (method != null) {
308 if (utils.isAbstract(holder) && utils.isAbstract(method)){
309 //Abstract method is implemented from abstract class,
310 //not overridden
311 label = contents.specifiedByLabel;
312 context = LinkInfoImpl.Kind.METHOD_SPECIFIED_BY;
313 }
314 Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.overrideSpecifyLabel, label));
315 dl.add(dt);
316 Content overriddenTypeLink =
317 writer.getLink(new LinkInfoImpl(writer.configuration, context, overriddenType));
318 Content codeOverriddenTypeLink = HtmlTree.CODE(overriddenTypeLink);
319 Content methlink = writer.getLink(
320 new LinkInfoImpl(writer.configuration, LinkInfoImpl.Kind.MEMBER, holder)
321 .where(writer.links.getName(writer.getAnchor(method)))
322 .label(method.getSimpleName()));
323 Content codeMethLink = HtmlTree.CODE(methlink);
324 Content dd = HtmlTree.DD(codeMethLink);
325 dd.add(Entity.NO_BREAK_SPACE);
326 dd.add(writer.contents.inClass);
327 dd.add(Entity.NO_BREAK_SPACE);
328 dd.add(codeOverriddenTypeLink);
329 dl.add(dd);
330 }
331 }
332
333 /**
334 * {@inheritDoc}
335 */
336 protected static void addImplementsInfo(HtmlDocletWriter writer,
337 ExecutableElement method, Content dl) {
338 Utils utils = writer.utils;
339 if (utils.isStatic(method) || writer.configuration.nocomment) {
340 return;
341 }
342 Contents contents = writer.contents;
|