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

changeset 1606
ccbe7ffdd867
parent 1417
522a1ee72340
child 1866
26437287529d
     1.1 --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Fri Feb 22 18:19:51 2013 +0000
     1.2 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Sun Feb 24 11:36:58 2013 -0800
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -26,6 +26,7 @@
    1.11  package com.sun.tools.doclets.internal.toolkit.builders;
    1.12  
    1.13  import java.util.*;
    1.14 +import java.text.MessageFormat;
    1.15  
    1.16  import com.sun.javadoc.*;
    1.17  import com.sun.tools.doclets.internal.toolkit.*;
    1.18 @@ -82,7 +83,7 @@
    1.19                      new VisibleMemberMap(
    1.20                      classDoc,
    1.21                      i,
    1.22 -                    configuration.nodeprecated);
    1.23 +                    configuration);
    1.24          }
    1.25      }
    1.26  
    1.27 @@ -254,6 +255,17 @@
    1.28      }
    1.29  
    1.30      /**
    1.31 +     * Build the summary for the fields.
    1.32 +     */
    1.33 +    public void buildPropertiesSummary(XMLNode node, Content memberSummaryTree) {
    1.34 +        MemberSummaryWriter writer =
    1.35 +                memberSummaryWriters[VisibleMemberMap.PROPERTIES];
    1.36 +        VisibleMemberMap visibleMemberMap =
    1.37 +                visibleMemberMaps[VisibleMemberMap.PROPERTIES];
    1.38 +        addSummary(writer, visibleMemberMap, true, memberSummaryTree);
    1.39 +    }
    1.40 +
    1.41 +    /**
    1.42       * Build the summary for the nested classes.
    1.43       *
    1.44       * @param node the XML element that specifies which components to document
    1.45 @@ -311,6 +323,11 @@
    1.46              List<Content> tableContents = new LinkedList<Content>();
    1.47              for (int i = 0; i < members.size(); i++) {
    1.48                  ProgramElementDoc member = members.get(i);
    1.49 +                final ProgramElementDoc propertyDoc =
    1.50 +                            visibleMemberMap.getPropertyMemberDoc(member);
    1.51 +                if (propertyDoc != null) {
    1.52 +                    processProperty(visibleMemberMap, member, propertyDoc);
    1.53 +                }
    1.54                  Tag[] firstSentenceTags = member.firstSentenceTags();
    1.55                  if (member instanceof MethodDoc && firstSentenceTags.length == 0) {
    1.56                      //Inherit comments from overriden or implemented method if
    1.57 @@ -330,6 +347,106 @@
    1.58      }
    1.59  
    1.60      /**
    1.61 +     * Process the property method, property setter and/or property getter
    1.62 +     * comment text so that it contains the documentation from
    1.63 +     * the property field. The method adds the leading sentence,
    1.64 +     * copied documentation including the defaultValue tag and
    1.65 +     * the see tags if the appropriate property getter and setter are
    1.66 +     * available.
    1.67 +     *
    1.68 +     * @param visibleMemberMap the members information.
    1.69 +     * @param member the member which is to be augmented.
    1.70 +     * @param propertyDoc the original property documentation.
    1.71 +     */
    1.72 +    private void processProperty(VisibleMemberMap visibleMemberMap,
    1.73 +                                 ProgramElementDoc member,
    1.74 +                                 ProgramElementDoc propertyDoc) {
    1.75 +        StringBuilder commentTextBuilder = new StringBuilder();
    1.76 +        final boolean isSetter = isSetter(member);
    1.77 +        final boolean isGetter = isGetter(member);
    1.78 +        if (isGetter || isSetter) {
    1.79 +            //add "[GS]ets the value of the property PROPERTY_NAME."
    1.80 +            if (isSetter) {
    1.81 +                commentTextBuilder.append(
    1.82 +                        MessageFormat.format(
    1.83 +                                configuration.getText("doclet.PropertySetterWithName"),
    1.84 +                                Util.propertyNameFromMethodName(member.name())));
    1.85 +            }
    1.86 +            if (isGetter) {
    1.87 +                commentTextBuilder.append(
    1.88 +                        MessageFormat.format(
    1.89 +                                configuration.getText("doclet.PropertyGetterWithName"),
    1.90 +                                Util.propertyNameFromMethodName(member.name())));
    1.91 +            }
    1.92 +            if (propertyDoc.commentText() != null
    1.93 +                        && !propertyDoc.commentText().isEmpty()) {
    1.94 +                commentTextBuilder.append(" \n @propertyDescription ");
    1.95 +            }
    1.96 +        }
    1.97 +        commentTextBuilder.append(propertyDoc.commentText());
    1.98 +
    1.99 +        Tag[] tags = propertyDoc.tags("@defaultValue");
   1.100 +        if (tags != null) {
   1.101 +            for (Tag tag: tags) {
   1.102 +                commentTextBuilder.append("\n")
   1.103 +                                  .append(tag.name())
   1.104 +                                  .append(" ")
   1.105 +                                  .append(tag.text());
   1.106 +            }
   1.107 +        }
   1.108 +
   1.109 +        //add @see tags
   1.110 +        if (!isGetter && !isSetter) {
   1.111 +            MethodDoc getter = (MethodDoc) visibleMemberMap.getGetterForProperty(member);
   1.112 +            MethodDoc setter = (MethodDoc) visibleMemberMap.getSetterForProperty(member);
   1.113 +
   1.114 +            if ((null != getter)
   1.115 +                    && (commentTextBuilder.indexOf("@see #" + getter.name()) == -1)) {
   1.116 +                commentTextBuilder.append("\n @see #")
   1.117 +                                  .append(getter.name())
   1.118 +                                  .append("() ");
   1.119 +            }
   1.120 +
   1.121 +            if ((null != setter)
   1.122 +                    && (commentTextBuilder.indexOf("@see #" + setter.name()) == -1)) {
   1.123 +                String typeName = setter.parameters()[0].typeName();
   1.124 +                // Removal of type parameters and package information.
   1.125 +                typeName = typeName.split("<")[0];
   1.126 +                if (typeName.contains(".")) {
   1.127 +                    typeName = typeName.substring(typeName.lastIndexOf(".") + 1);
   1.128 +                }
   1.129 +                commentTextBuilder.append("\n @see #").append(setter.name());
   1.130 +
   1.131 +                if (setter.parameters()[0].type().asTypeVariable() == null) {
   1.132 +                    commentTextBuilder.append("(").append(typeName).append(")");
   1.133 +                }
   1.134 +                commentTextBuilder.append(" \n");
   1.135 +            }
   1.136 +        }
   1.137 +        member.setRawCommentText(commentTextBuilder.toString());
   1.138 +    }
   1.139 +    /**
   1.140 +     * Test whether the method is a getter.
   1.141 +     * @param ped property method documentation. Needs to be either property
   1.142 +     * method, property getter, or property setter.
   1.143 +     * @return true if the given documentation belongs to a getter.
   1.144 +     */
   1.145 +    private boolean isGetter(ProgramElementDoc ped) {
   1.146 +        final String pedName = ped.name();
   1.147 +        return pedName.startsWith("get") || pedName.startsWith("is");
   1.148 +    }
   1.149 +
   1.150 +    /**
   1.151 +     * Test whether the method is a setter.
   1.152 +     * @param ped property method documentation. Needs to be either property
   1.153 +     * method, property getter, or property setter.
   1.154 +     * @return true if the given documentation belongs to a setter.
   1.155 +     */
   1.156 +    private boolean isSetter(ProgramElementDoc ped) {
   1.157 +        return ped.name().startsWith("set");
   1.158 +    }
   1.159 +
   1.160 +    /**
   1.161       * Build the inherited member summary for the given methods.
   1.162       *
   1.163       * @param writer the writer for this member summary.

mercurial