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

changeset 766
90af8d87741f
parent 589
4177f5bdd189
child 798
4868a36f6fd8
     1.1 --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Tue Nov 30 09:38:48 2010 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Wed Dec 01 11:02:38 2010 -0800
     1.3 @@ -25,10 +25,10 @@
     1.4  
     1.5  package com.sun.tools.doclets.internal.toolkit.builders;
     1.6  
     1.7 +import java.util.*;
     1.8  import com.sun.tools.doclets.internal.toolkit.util.*;
     1.9  import com.sun.tools.doclets.internal.toolkit.*;
    1.10  import com.sun.javadoc.*;
    1.11 -import java.util.*;
    1.12  
    1.13  /**
    1.14   * Builds the member summary.
    1.15 @@ -38,49 +38,50 @@
    1.16   * Do not use it as an API
    1.17   *
    1.18   * @author Jamie Ho
    1.19 + * @author Bhavesh Patel (Modified)
    1.20   * @since 1.5
    1.21   */
    1.22  public class MemberSummaryBuilder extends AbstractMemberBuilder {
    1.23  
    1.24 -        /**
    1.25 -         * The XML root for this builder.
    1.26 -         */
    1.27 -        public static final String NAME = "MemberSummary";
    1.28 +    /**
    1.29 +     * The XML root for this builder.
    1.30 +     */
    1.31 +    public static final String NAME = "MemberSummary";
    1.32  
    1.33 -        /**
    1.34 -         * The visible members for the given class.
    1.35 -         */
    1.36 -        private VisibleMemberMap[] visibleMemberMaps;
    1.37 +    /**
    1.38 +     * The visible members for the given class.
    1.39 +     */
    1.40 +    private VisibleMemberMap[] visibleMemberMaps;
    1.41  
    1.42 -        /**
    1.43 -         * The member summary writers for the given class.
    1.44 -         */
    1.45 -        private MemberSummaryWriter[] memberSummaryWriters;
    1.46 +    /**
    1.47 +     * The member summary writers for the given class.
    1.48 +     */
    1.49 +    private MemberSummaryWriter[] memberSummaryWriters;
    1.50  
    1.51 -        /**
    1.52 -         * The type being documented.
    1.53 -         */
    1.54 -        private ClassDoc classDoc;
    1.55 +    /**
    1.56 +     * The type being documented.
    1.57 +     */
    1.58 +    private ClassDoc classDoc;
    1.59  
    1.60 -        private MemberSummaryBuilder(Configuration configuration) {
    1.61 -                super(configuration);
    1.62 -        }
    1.63 +    private MemberSummaryBuilder(Configuration configuration) {
    1.64 +        super(configuration);
    1.65 +    }
    1.66  
    1.67 -        /**
    1.68 -         * Construct a new MemberSummaryBuilder.
    1.69 -         *
    1.70 -         * @param classWriter   the writer for the class whose members are being
    1.71 -         *                      summarized.
    1.72 -         * @param configuration the current configuration of the doclet.
    1.73 -         */
    1.74 -        public static MemberSummaryBuilder getInstance(
    1.75 -                ClassWriter classWriter, Configuration configuration)
    1.76 -        throws Exception {
    1.77 -                MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
    1.78 -                builder.classDoc = classWriter.getClassDoc();
    1.79 -                builder.init(classWriter);
    1.80 -                return builder;
    1.81 -        }
    1.82 +    /**
    1.83 +     * Construct a new MemberSummaryBuilder.
    1.84 +     *
    1.85 +     * @param classWriter   the writer for the class whose members are being
    1.86 +     *                      summarized.
    1.87 +     * @param configuration the current configuration of the doclet.
    1.88 +     */
    1.89 +    public static MemberSummaryBuilder getInstance(
    1.90 +            ClassWriter classWriter, Configuration configuration)
    1.91 +            throws Exception {
    1.92 +        MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
    1.93 +        builder.classDoc = classWriter.getClassDoc();
    1.94 +        builder.init(classWriter);
    1.95 +        return builder;
    1.96 +    }
    1.97  
    1.98      /**
    1.99       * Construct a new MemberSummaryBuilder.
   1.100 @@ -90,8 +91,8 @@
   1.101       * @param configuration the current configuration of the doclet.
   1.102       */
   1.103      public static MemberSummaryBuilder getInstance(
   1.104 -        AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
   1.105 -    throws Exception {
   1.106 +            AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
   1.107 +            throws Exception {
   1.108          MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
   1.109          builder.classDoc = annotationTypeWriter.getAnnotationTypeDoc();
   1.110          builder.init(annotationTypeWriter);
   1.111 @@ -100,200 +101,209 @@
   1.112  
   1.113      private void init(Object writer) throws Exception {
   1.114          visibleMemberMaps =
   1.115 -            new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
   1.116 +                new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
   1.117          for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
   1.118              visibleMemberMaps[i] =
   1.119 -                new VisibleMemberMap(
   1.120 +                    new VisibleMemberMap(
   1.121                      classDoc,
   1.122                      i,
   1.123                      configuration.nodeprecated);
   1.124          }
   1.125          memberSummaryWriters =
   1.126 -            new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
   1.127 +                new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
   1.128          for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
   1.129              if (classDoc.isAnnotationType()) {
   1.130                  memberSummaryWriters[i] =
   1.131                      visibleMemberMaps[i].noVisibleMembers()?
   1.132                          null :
   1.133                          configuration.getWriterFactory().getMemberSummaryWriter(
   1.134 -                            (AnnotationTypeWriter) writer, i);
   1.135 +                        (AnnotationTypeWriter) writer, i);
   1.136              } else {
   1.137                  memberSummaryWriters[i] =
   1.138                      visibleMemberMaps[i].noVisibleMembers()?
   1.139                          null :
   1.140                          configuration.getWriterFactory().getMemberSummaryWriter(
   1.141 -                            (ClassWriter) writer, i);
   1.142 +                        (ClassWriter) writer, i);
   1.143              }
   1.144          }
   1.145  
   1.146      }
   1.147  
   1.148 -        /**
   1.149 -         * {@inheritDoc}
   1.150 -         */
   1.151 -        public String getName() {
   1.152 -                return NAME;
   1.153 -        }
   1.154 +    /**
   1.155 +     * {@inheritDoc}
   1.156 +     */
   1.157 +    public String getName() {
   1.158 +        return NAME;
   1.159 +    }
   1.160  
   1.161 -        /**
   1.162 -         * Return the specified visible member map.
   1.163 -         *
   1.164 -         * @param type the type of visible member map to return.
   1.165 -         * @return the specified visible member map.
   1.166 -         * @throws ArrayIndexOutOfBoundsException when the type is invalid.
   1.167 -         * @see VisibleMemberMap
   1.168 -         */
   1.169 -        public VisibleMemberMap getVisibleMemberMap(int type) {
   1.170 -                return visibleMemberMaps[type];
   1.171 -        }
   1.172 +    /**
   1.173 +     * Return the specified visible member map.
   1.174 +     *
   1.175 +     * @param type the type of visible member map to return.
   1.176 +     * @return the specified visible member map.
   1.177 +     * @throws ArrayIndexOutOfBoundsException when the type is invalid.
   1.178 +     * @see VisibleMemberMap
   1.179 +     */
   1.180 +    public VisibleMemberMap getVisibleMemberMap(int type) {
   1.181 +        return visibleMemberMaps[type];
   1.182 +    }
   1.183  
   1.184 -        /**
   1.185 -         * Return the specified member summary writer.
   1.186 -         *
   1.187 -         * @param type the type of member summary writer to return.
   1.188 -         * @return the specified member summary writer.
   1.189 -         * @throws ArrayIndexOutOfBoundsException when the type is invalid.
   1.190 -         * @see VisibleMemberMap
   1.191 -         */
   1.192 -        public MemberSummaryWriter getMemberSummaryWriter(int type) {
   1.193 -                return memberSummaryWriters[type];
   1.194 -        }
   1.195 +    /**
   1.196 +     * Return the specified member summary writer.
   1.197 +     *
   1.198 +     * @param type the type of member summary writer to return.
   1.199 +     * @return the specified member summary writer.
   1.200 +     * @throws ArrayIndexOutOfBoundsException when the type is invalid.
   1.201 +     * @see VisibleMemberMap
   1.202 +     */
   1.203 +    public MemberSummaryWriter getMemberSummaryWriter(int type) {
   1.204 +        return memberSummaryWriters[type];
   1.205 +    }
   1.206  
   1.207 -        /**
   1.208 -         * Returns a list of methods that will be documented for the given class.
   1.209 -         * This information can be used for doclet specific documentation
   1.210 -         * generation.
   1.211 -         *
   1.212 -         * @param classDoc the {@link ClassDoc} we want to check.
   1.213 -         * @param type the type of members to return.
   1.214 -         * @return a list of methods that will be documented.
   1.215 -         * @see VisibleMemberMap
   1.216 -         */
   1.217 -        public List<ProgramElementDoc> members(int type) {
   1.218 -                return visibleMemberMaps[type].getLeafClassMembers(configuration);
   1.219 -        }
   1.220 +    /**
   1.221 +     * Returns a list of methods that will be documented for the given class.
   1.222 +     * This information can be used for doclet specific documentation
   1.223 +     * generation.
   1.224 +     *
   1.225 +     * @param classDoc the {@link ClassDoc} we want to check.
   1.226 +     * @param type the type of members to return.
   1.227 +     * @return a list of methods that will be documented.
   1.228 +     * @see VisibleMemberMap
   1.229 +     */
   1.230 +    public List<ProgramElementDoc> members(int type) {
   1.231 +        return visibleMemberMaps[type].getLeafClassMembers(configuration);
   1.232 +    }
   1.233  
   1.234 -        /**
   1.235 -         * Return true it there are any members to summarize.
   1.236 -         *
   1.237 -         * @return true if there are any members to summarize.
   1.238 -         */
   1.239 -        public boolean hasMembersToDocument() {
   1.240 +    /**
   1.241 +     * Return true it there are any members to summarize.
   1.242 +     *
   1.243 +     * @return true if there are any members to summarize.
   1.244 +     */
   1.245 +    public boolean hasMembersToDocument() {
   1.246          if (classDoc instanceof AnnotationTypeDoc) {
   1.247              return ((AnnotationTypeDoc) classDoc).elements().length > 0;
   1.248          }
   1.249 -                for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
   1.250 -                        VisibleMemberMap members = visibleMemberMaps[i];
   1.251 -                        if (!members.noVisibleMembers()) {
   1.252 -                                return true;
   1.253 -                        }
   1.254 -                }
   1.255 -                return false;
   1.256 +        for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
   1.257 +            VisibleMemberMap members = visibleMemberMaps[i];
   1.258 +            if (!members.noVisibleMembers()) {
   1.259 +                return true;
   1.260 +            }
   1.261          }
   1.262 -
   1.263 -        /**
   1.264 -         * Build the summary for the enum constants.
   1.265 -         */
   1.266 -        public void buildEnumConstantsSummary(XMLNode node) {
   1.267 -                buildSummary(
   1.268 -                        memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS],
   1.269 -                        visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]);
   1.270 -        }
   1.271 +        return false;
   1.272 +    }
   1.273  
   1.274      /**
   1.275 -     * Build the summary for the optional members.
   1.276 +     * Build the summary for the enum constants.
   1.277 +     *
   1.278 +     * @param node the XML element that specifies which components to document
   1.279 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.280       */
   1.281 -    public void buildAnnotationTypeOptionalMemberSummary(XMLNode node) {
   1.282 -        buildSummary(
   1.283 -            memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL],
   1.284 -                visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]);
   1.285 +    public void buildEnumConstantsSummary(XMLNode node, Content memberSummaryTree) {
   1.286 +        MemberSummaryWriter writer =
   1.287 +                memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS];
   1.288 +        VisibleMemberMap visibleMemberMap =
   1.289 +                visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS];
   1.290 +        addSummary(writer, visibleMemberMap, false, memberSummaryTree);
   1.291      }
   1.292  
   1.293      /**
   1.294       * Build the summary for the optional members.
   1.295 +     *
   1.296 +     * @param node the XML element that specifies which components to document
   1.297 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.298       */
   1.299 -    public void buildAnnotationTypeRequiredMemberSummary(XMLNode node) {
   1.300 -        buildSummary(
   1.301 -            memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED],
   1.302 -                visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]);
   1.303 +    public void buildAnnotationTypeOptionalMemberSummary(XMLNode node, Content memberSummaryTree) {
   1.304 +        MemberSummaryWriter writer =
   1.305 +                memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
   1.306 +        VisibleMemberMap visibleMemberMap =
   1.307 +                visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
   1.308 +        addSummary(writer, visibleMemberMap, false, memberSummaryTree);
   1.309      }
   1.310  
   1.311 -        /**
   1.312 -         * Build the summary for the fields.
   1.313 -         */
   1.314 -        public void buildFieldsSummary(XMLNode node) {
   1.315 -                buildSummary(
   1.316 -                        memberSummaryWriters[VisibleMemberMap.FIELDS],
   1.317 -                        visibleMemberMaps[VisibleMemberMap.FIELDS]);
   1.318 -        }
   1.319 +    /**
   1.320 +     * Build the summary for the optional members.
   1.321 +     *
   1.322 +     * @param node the XML element that specifies which components to document
   1.323 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.324 +     */
   1.325 +    public void buildAnnotationTypeRequiredMemberSummary(XMLNode node, Content memberSummaryTree) {
   1.326 +        MemberSummaryWriter writer =
   1.327 +                memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
   1.328 +        VisibleMemberMap visibleMemberMap =
   1.329 +                visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
   1.330 +        addSummary(writer, visibleMemberMap, false, memberSummaryTree);
   1.331 +    }
   1.332  
   1.333 -        /**
   1.334 -         * Build the inherited summary for the fields.
   1.335 -         */
   1.336 -        public void buildFieldsInheritedSummary(XMLNode node) {
   1.337 -                buildInheritedSummary(
   1.338 -                        memberSummaryWriters[VisibleMemberMap.FIELDS],
   1.339 -                        visibleMemberMaps[VisibleMemberMap.FIELDS]);
   1.340 -        }
   1.341 +    /**
   1.342 +     * Build the summary for the fields.
   1.343 +     *
   1.344 +     * @param node the XML element that specifies which components to document
   1.345 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.346 +     */
   1.347 +    public void buildFieldsSummary(XMLNode node, Content memberSummaryTree) {
   1.348 +        MemberSummaryWriter writer =
   1.349 +                memberSummaryWriters[VisibleMemberMap.FIELDS];
   1.350 +        VisibleMemberMap visibleMemberMap =
   1.351 +                visibleMemberMaps[VisibleMemberMap.FIELDS];
   1.352 +        addSummary(writer, visibleMemberMap, true, memberSummaryTree);
   1.353 +    }
   1.354  
   1.355 -        /**
   1.356 -         * Build the summary for the nested classes.
   1.357 -         */
   1.358 -        public void buildNestedClassesSummary(XMLNode node) {
   1.359 -                buildSummary(
   1.360 -                        memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
   1.361 -                        visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
   1.362 -        }
   1.363 +    /**
   1.364 +     * Build the summary for the nested classes.
   1.365 +     *
   1.366 +     * @param node the XML element that specifies which components to document
   1.367 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.368 +     */
   1.369 +    public void buildNestedClassesSummary(XMLNode node, Content memberSummaryTree) {
   1.370 +        MemberSummaryWriter writer =
   1.371 +                memberSummaryWriters[VisibleMemberMap.INNERCLASSES];
   1.372 +        VisibleMemberMap visibleMemberMap =
   1.373 +                visibleMemberMaps[VisibleMemberMap.INNERCLASSES];
   1.374 +        addSummary(writer, visibleMemberMap, true, memberSummaryTree);
   1.375 +    }
   1.376  
   1.377 -        /**
   1.378 -         * Build the inherited summary for the nested classes.
   1.379 -         */
   1.380 -        public void buildNestedClassesInheritedSummary(XMLNode node) {
   1.381 -                buildInheritedSummary(
   1.382 -                        memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
   1.383 -                        visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
   1.384 -        }
   1.385 +    /**
   1.386 +     * Build the method summary.
   1.387 +     *
   1.388 +     * @param node the XML element that specifies which components to document
   1.389 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.390 +     */
   1.391 +    public void buildMethodsSummary(XMLNode node, Content memberSummaryTree) {
   1.392 +        MemberSummaryWriter writer =
   1.393 +                memberSummaryWriters[VisibleMemberMap.METHODS];
   1.394 +        VisibleMemberMap visibleMemberMap =
   1.395 +                visibleMemberMaps[VisibleMemberMap.METHODS];
   1.396 +        addSummary(writer, visibleMemberMap, true, memberSummaryTree);
   1.397 +    }
   1.398  
   1.399 -        /**
   1.400 -         * Build the method summary.
   1.401 -         */
   1.402 -        public void buildMethodsSummary(XMLNode node) {
   1.403 -                buildSummary(
   1.404 -                        memberSummaryWriters[VisibleMemberMap.METHODS],
   1.405 -                        visibleMemberMaps[VisibleMemberMap.METHODS]);
   1.406 -        }
   1.407 +    /**
   1.408 +     * Build the constructor summary.
   1.409 +     *
   1.410 +     * @param node the XML element that specifies which components to document
   1.411 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.412 +     */
   1.413 +    public void buildConstructorsSummary(XMLNode node, Content memberSummaryTree) {
   1.414 +        MemberSummaryWriter writer =
   1.415 +                memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS];
   1.416 +        VisibleMemberMap visibleMemberMap =
   1.417 +                visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS];
   1.418 +        addSummary(writer, visibleMemberMap, false, memberSummaryTree);
   1.419 +    }
   1.420  
   1.421 -        /**
   1.422 -         * Build the inherited method summary.
   1.423 -         */
   1.424 -        public void buildMethodsInheritedSummary(XMLNode node) {
   1.425 -                buildInheritedSummary(
   1.426 -                        memberSummaryWriters[VisibleMemberMap.METHODS],
   1.427 -                        visibleMemberMaps[VisibleMemberMap.METHODS]);
   1.428 -        }
   1.429 -
   1.430 -        /**
   1.431 -         * Build the constructor summary.
   1.432 -         */
   1.433 -        public void buildConstructorsSummary(XMLNode node) {
   1.434 -                buildSummary(
   1.435 -                        memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS],
   1.436 -                        visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]);
   1.437 -        }
   1.438 -
   1.439 -        /**
   1.440 -         * Build the member summary for the given members.
   1.441 -         *
   1.442 -         * @param writer           the summary writer to write the output.
   1.443 -         * @param visibleMemberMap the given members to summarize.
   1.444 -         */
   1.445 -        private void buildSummary(MemberSummaryWriter writer,
   1.446 -            VisibleMemberMap visibleMemberMap) {
   1.447 +    /**
   1.448 +     * Build the member summary for the given members.
   1.449 +     *
   1.450 +     * @param writer the summary writer to write the output.
   1.451 +     * @param visibleMemberMap the given members to summarize.
   1.452 +     * @param summaryTreeList list of content trees to which the documentation will be added
   1.453 +     */
   1.454 +    private void buildSummary(MemberSummaryWriter writer,
   1.455 +            VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
   1.456          List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>(visibleMemberMap.getLeafClassMembers(
   1.457 -            configuration));
   1.458 +                configuration));
   1.459          if (members.size() > 0) {
   1.460              Collections.sort(members);
   1.461 -            writer.writeMemberSummaryHeader(classDoc);
   1.462 +            Content tableTree = writer.getSummaryTableTree(classDoc);
   1.463              for (int i = 0; i < members.size(); i++) {
   1.464                  ProgramElementDoc member = members.get(i);
   1.465                  Tag[] firstSentenceTags = member.firstSentenceTags();
   1.466 @@ -301,32 +311,32 @@
   1.467                      //Inherit comments from overriden or implemented method if
   1.468                      //necessary.
   1.469                      DocFinder.Output inheritedDoc =
   1.470 -                        DocFinder.search(new DocFinder.Input((MethodDoc) member));
   1.471 +                            DocFinder.search(new DocFinder.Input((MethodDoc) member));
   1.472                      if (inheritedDoc.holder != null &&
   1.473                              inheritedDoc.holder.firstSentenceTags().length > 0) {
   1.474                          firstSentenceTags = inheritedDoc.holder.firstSentenceTags();
   1.475                      }
   1.476                  }
   1.477 -                writer.writeMemberSummary(classDoc, member, firstSentenceTags,
   1.478 -                    i == 0, i == members.size() - 1);
   1.479 +                writer.addMemberSummary(classDoc, member, firstSentenceTags, tableTree, i);
   1.480              }
   1.481 -            writer.writeMemberSummaryFooter(classDoc);
   1.482 +            summaryTreeList.add(tableTree);
   1.483          }
   1.484 -        }
   1.485 +    }
   1.486  
   1.487      /**
   1.488       * Build the inherited member summary for the given methods.
   1.489       *
   1.490 -     * @param writer           the writer for this member summary.
   1.491 +     * @param writer the writer for this member summary.
   1.492       * @param visibleMemberMap the map for the members to document.
   1.493 +     * @param summaryTreeList list of content trees to which the documentation will be added
   1.494       */
   1.495 -        private void buildInheritedSummary(MemberSummaryWriter writer,
   1.496 -            VisibleMemberMap visibleMemberMap) {
   1.497 +    private void buildInheritedSummary(MemberSummaryWriter writer,
   1.498 +            VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
   1.499          for (Iterator<ClassDoc> iter = visibleMemberMap.getVisibleClassesList().iterator();
   1.500                  iter.hasNext();) {
   1.501              ClassDoc inhclass = iter.next();
   1.502              if (! (inhclass.isPublic() ||
   1.503 -                Util.isLinkable(inhclass, configuration))) {
   1.504 +                    Util.isLinkable(inhclass, configuration))) {
   1.505                  continue;
   1.506              }
   1.507              if (inhclass == classDoc) {
   1.508 @@ -335,18 +345,45 @@
   1.509              List<ProgramElementDoc> inhmembers = visibleMemberMap.getMembersFor(inhclass);
   1.510              if (inhmembers.size() > 0) {
   1.511                  Collections.sort(inhmembers);
   1.512 -                writer.writeInheritedMemberSummaryHeader(inhclass);
   1.513 +                Content inheritedTree = writer.getInheritedSummaryHeader(inhclass);
   1.514 +                Content linksTree = writer.getInheritedSummaryLinksTree();
   1.515                  for (int j = 0; j < inhmembers.size(); ++j) {
   1.516 -                    writer.writeInheritedMemberSummary(
   1.517 -                        inhclass.isPackagePrivate() &&
   1.518 +                    writer.addInheritedMemberSummary(
   1.519 +                            inhclass.isPackagePrivate() &&
   1.520                              ! Util.isLinkable(inhclass, configuration) ?
   1.521                              classDoc : inhclass,
   1.522 -                        inhmembers.get(j),
   1.523 -                        j == 0,
   1.524 -                        j == inhmembers.size() - 1);
   1.525 +                            inhmembers.get(j),
   1.526 +                            j == 0,
   1.527 +                            j == inhmembers.size() - 1, linksTree);
   1.528                  }
   1.529 -                writer.writeInheritedMemberSummaryFooter(inhclass);
   1.530 +                inheritedTree.addContent(linksTree);
   1.531 +                summaryTreeList.add(writer.getMemberTree(inheritedTree));
   1.532              }
   1.533          }
   1.534      }
   1.535 +
   1.536 +    /**
   1.537 +     * Add the summary for the documentation.
   1.538 +     *
   1.539 +     * @param writer the writer for this member summary.
   1.540 +     * @param visibleMemberMap the map for the members to document.
   1.541 +     * @param showInheritedSummary true if inherited summary should be documented
   1.542 +     * @param memberSummaryTree the content tree to which the documentation will be added
   1.543 +     */
   1.544 +    private void addSummary(MemberSummaryWriter writer,
   1.545 +            VisibleMemberMap visibleMemberMap, boolean showInheritedSummary,
   1.546 +            Content memberSummaryTree) {
   1.547 +        LinkedList<Content> summaryTreeList = new LinkedList<Content>();
   1.548 +        buildSummary(writer, visibleMemberMap, summaryTreeList);
   1.549 +        if (showInheritedSummary)
   1.550 +            buildInheritedSummary(writer, visibleMemberMap, summaryTreeList);
   1.551 +        if (!summaryTreeList.isEmpty()) {
   1.552 +            Content memberTree = writer.getMemberSummaryHeader(
   1.553 +                    classDoc, memberSummaryTree);
   1.554 +            for (int i = 0; i < summaryTreeList.size(); i++) {
   1.555 +                memberTree.addContent(summaryTreeList.get(i));
   1.556 +            }
   1.557 +            memberSummaryTree.addContent(writer.getMemberTree(memberTree));
   1.558 +        }
   1.559 +    }
   1.560  }

mercurial