252 visibleMemberMaps[VisibleMemberMap.FIELDS]; |
253 visibleMemberMaps[VisibleMemberMap.FIELDS]; |
253 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
254 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
254 } |
255 } |
255 |
256 |
256 /** |
257 /** |
|
258 * Build the summary for the fields. |
|
259 */ |
|
260 public void buildPropertiesSummary(XMLNode node, Content memberSummaryTree) { |
|
261 MemberSummaryWriter writer = |
|
262 memberSummaryWriters[VisibleMemberMap.PROPERTIES]; |
|
263 VisibleMemberMap visibleMemberMap = |
|
264 visibleMemberMaps[VisibleMemberMap.PROPERTIES]; |
|
265 addSummary(writer, visibleMemberMap, true, memberSummaryTree); |
|
266 } |
|
267 |
|
268 /** |
257 * Build the summary for the nested classes. |
269 * Build the summary for the nested classes. |
258 * |
270 * |
259 * @param node the XML element that specifies which components to document |
271 * @param node the XML element that specifies which components to document |
260 * @param memberSummaryTree the content tree to which the documentation will be added |
272 * @param memberSummaryTree the content tree to which the documentation will be added |
261 */ |
273 */ |
309 if (members.size() > 0) { |
321 if (members.size() > 0) { |
310 Collections.sort(members); |
322 Collections.sort(members); |
311 List<Content> tableContents = new LinkedList<Content>(); |
323 List<Content> tableContents = new LinkedList<Content>(); |
312 for (int i = 0; i < members.size(); i++) { |
324 for (int i = 0; i < members.size(); i++) { |
313 ProgramElementDoc member = members.get(i); |
325 ProgramElementDoc member = members.get(i); |
|
326 final ProgramElementDoc propertyDoc = |
|
327 visibleMemberMap.getPropertyMemberDoc(member); |
|
328 if (propertyDoc != null) { |
|
329 processProperty(visibleMemberMap, member, propertyDoc); |
|
330 } |
314 Tag[] firstSentenceTags = member.firstSentenceTags(); |
331 Tag[] firstSentenceTags = member.firstSentenceTags(); |
315 if (member instanceof MethodDoc && firstSentenceTags.length == 0) { |
332 if (member instanceof MethodDoc && firstSentenceTags.length == 0) { |
316 //Inherit comments from overriden or implemented method if |
333 //Inherit comments from overriden or implemented method if |
317 //necessary. |
334 //necessary. |
318 DocFinder.Output inheritedDoc = |
335 DocFinder.Output inheritedDoc = |
325 writer.addMemberSummary(classDoc, member, firstSentenceTags, |
342 writer.addMemberSummary(classDoc, member, firstSentenceTags, |
326 tableContents, i); |
343 tableContents, i); |
327 } |
344 } |
328 summaryTreeList.add(writer.getSummaryTableTree(classDoc, tableContents)); |
345 summaryTreeList.add(writer.getSummaryTableTree(classDoc, tableContents)); |
329 } |
346 } |
|
347 } |
|
348 |
|
349 /** |
|
350 * Process the property method, property setter and/or property getter |
|
351 * comment text so that it contains the documentation from |
|
352 * the property field. The method adds the leading sentence, |
|
353 * copied documentation including the defaultValue tag and |
|
354 * the see tags if the appropriate property getter and setter are |
|
355 * available. |
|
356 * |
|
357 * @param visibleMemberMap the members information. |
|
358 * @param member the member which is to be augmented. |
|
359 * @param propertyDoc the original property documentation. |
|
360 */ |
|
361 private void processProperty(VisibleMemberMap visibleMemberMap, |
|
362 ProgramElementDoc member, |
|
363 ProgramElementDoc propertyDoc) { |
|
364 StringBuilder commentTextBuilder = new StringBuilder(); |
|
365 final boolean isSetter = isSetter(member); |
|
366 final boolean isGetter = isGetter(member); |
|
367 if (isGetter || isSetter) { |
|
368 //add "[GS]ets the value of the property PROPERTY_NAME." |
|
369 if (isSetter) { |
|
370 commentTextBuilder.append( |
|
371 MessageFormat.format( |
|
372 configuration.getText("doclet.PropertySetterWithName"), |
|
373 Util.propertyNameFromMethodName(member.name()))); |
|
374 } |
|
375 if (isGetter) { |
|
376 commentTextBuilder.append( |
|
377 MessageFormat.format( |
|
378 configuration.getText("doclet.PropertyGetterWithName"), |
|
379 Util.propertyNameFromMethodName(member.name()))); |
|
380 } |
|
381 if (propertyDoc.commentText() != null |
|
382 && !propertyDoc.commentText().isEmpty()) { |
|
383 commentTextBuilder.append(" \n @propertyDescription "); |
|
384 } |
|
385 } |
|
386 commentTextBuilder.append(propertyDoc.commentText()); |
|
387 |
|
388 Tag[] tags = propertyDoc.tags("@defaultValue"); |
|
389 if (tags != null) { |
|
390 for (Tag tag: tags) { |
|
391 commentTextBuilder.append("\n") |
|
392 .append(tag.name()) |
|
393 .append(" ") |
|
394 .append(tag.text()); |
|
395 } |
|
396 } |
|
397 |
|
398 //add @see tags |
|
399 if (!isGetter && !isSetter) { |
|
400 MethodDoc getter = (MethodDoc) visibleMemberMap.getGetterForProperty(member); |
|
401 MethodDoc setter = (MethodDoc) visibleMemberMap.getSetterForProperty(member); |
|
402 |
|
403 if ((null != getter) |
|
404 && (commentTextBuilder.indexOf("@see #" + getter.name()) == -1)) { |
|
405 commentTextBuilder.append("\n @see #") |
|
406 .append(getter.name()) |
|
407 .append("() "); |
|
408 } |
|
409 |
|
410 if ((null != setter) |
|
411 && (commentTextBuilder.indexOf("@see #" + setter.name()) == -1)) { |
|
412 String typeName = setter.parameters()[0].typeName(); |
|
413 // Removal of type parameters and package information. |
|
414 typeName = typeName.split("<")[0]; |
|
415 if (typeName.contains(".")) { |
|
416 typeName = typeName.substring(typeName.lastIndexOf(".") + 1); |
|
417 } |
|
418 commentTextBuilder.append("\n @see #").append(setter.name()); |
|
419 |
|
420 if (setter.parameters()[0].type().asTypeVariable() == null) { |
|
421 commentTextBuilder.append("(").append(typeName).append(")"); |
|
422 } |
|
423 commentTextBuilder.append(" \n"); |
|
424 } |
|
425 } |
|
426 member.setRawCommentText(commentTextBuilder.toString()); |
|
427 } |
|
428 /** |
|
429 * Test whether the method is a getter. |
|
430 * @param ped property method documentation. Needs to be either property |
|
431 * method, property getter, or property setter. |
|
432 * @return true if the given documentation belongs to a getter. |
|
433 */ |
|
434 private boolean isGetter(ProgramElementDoc ped) { |
|
435 final String pedName = ped.name(); |
|
436 return pedName.startsWith("get") || pedName.startsWith("is"); |
|
437 } |
|
438 |
|
439 /** |
|
440 * Test whether the method is a setter. |
|
441 * @param ped property method documentation. Needs to be either property |
|
442 * method, property getter, or property setter. |
|
443 * @return true if the given documentation belongs to a setter. |
|
444 */ |
|
445 private boolean isSetter(ProgramElementDoc ped) { |
|
446 return ped.name().startsWith("set"); |
330 } |
447 } |
331 |
448 |
332 /** |
449 /** |
333 * Build the inherited member summary for the given methods. |
450 * Build the inherited member summary for the given methods. |
334 * |
451 * |