src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java

changeset 1606
ccbe7ffdd867
parent 1417
522a1ee72340
child 1866
26437287529d
equal deleted inserted replaced
1605:94e67bed460d 1606:ccbe7ffdd867
1 /* 1 /*
2 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this 7 * published by the Free Software Foundation. Oracle designates this
24 */ 24 */
25 25
26 package com.sun.tools.doclets.internal.toolkit.builders; 26 package com.sun.tools.doclets.internal.toolkit.builders;
27 27
28 import java.util.*; 28 import java.util.*;
29 import java.text.MessageFormat;
29 30
30 import com.sun.javadoc.*; 31 import com.sun.javadoc.*;
31 import com.sun.tools.doclets.internal.toolkit.*; 32 import com.sun.tools.doclets.internal.toolkit.*;
32 import com.sun.tools.doclets.internal.toolkit.util.*; 33 import com.sun.tools.doclets.internal.toolkit.util.*;
33 34
80 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) { 81 for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
81 visibleMemberMaps[i] = 82 visibleMemberMaps[i] =
82 new VisibleMemberMap( 83 new VisibleMemberMap(
83 classDoc, 84 classDoc,
84 i, 85 i,
85 configuration.nodeprecated); 86 configuration);
86 } 87 }
87 } 88 }
88 89
89 /** 90 /**
90 * Construct a new MemberSummaryBuilder. 91 * Construct a new MemberSummaryBuilder.
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 *

mercurial