src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/MemberSummaryBuilder.java
author pmuthuswamy
Tue, 23 Apr 2019 18:28:48 +0530
changeset 54596 86c1da00dd6a
parent 54060 53a95878619f
child 58477 d148a7e7160c
permissions -rw-r--r--
8219998: Eliminate inherently singleton lists Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     1
/*
54060
53a95878619f 8220202: Simplify/standardize method naming for HtmlTree
jjg
parents: 52644
diff changeset
     2
 * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
06bc494ca11e Initial load
duke
parents:
diff changeset
     4
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
06bc494ca11e Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    10
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
06bc494ca11e Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
06bc494ca11e Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
06bc494ca11e Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
06bc494ca11e Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
06bc494ca11e Initial load
duke
parents:
diff changeset
    16
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
06bc494ca11e Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
06bc494ca11e Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
06bc494ca11e Initial load
duke
parents:
diff changeset
    20
 *
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    23
 * questions.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    24
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    25
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    26
package jdk.javadoc.internal.doclets.toolkit.builders;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    27
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
    28
import java.text.MessageFormat;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    29
import java.util.*;
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    30
import java.util.stream.Collectors;
14258
8d2148961366 8000663: clean up langtools imports
jjg
parents: 7681
diff changeset
    31
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    32
import javax.lang.model.element.Element;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    33
import javax.lang.model.element.ExecutableElement;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    34
import javax.lang.model.element.TypeElement;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    35
import javax.lang.model.element.VariableElement;
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    36
import javax.lang.model.util.ElementFilter;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    37
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    38
import com.sun.source.doctree.DocCommentTree;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    39
import com.sun.source.doctree.DocTree;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    40
import com.sun.source.doctree.DocTree.Kind;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    41
import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    42
import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    43
import jdk.javadoc.internal.doclets.toolkit.Content;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    44
import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    45
import jdk.javadoc.internal.doclets.toolkit.WriterFactory;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    46
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    47
import jdk.javadoc.internal.doclets.toolkit.util.DocFinder;
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    48
import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberTable;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    49
import jdk.javadoc.internal.doclets.toolkit.CommentUtils;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    50
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    51
import static jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberTable.Kind.*;
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    52
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    53
/**
06bc494ca11e Initial load
duke
parents:
diff changeset
    54
 * Builds the member summary.
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    55
 * There are two anonymous subtype variants of this builder, created
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    56
 * in the {@link #getInstance} methods. One is for general types;
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    57
 * the other is for annotation types.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    58
 *
14260
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14259
diff changeset
    59
 *  <p><b>This is NOT part of any supported API.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14259
diff changeset
    60
 *  If you write code that depends on this, you do so at your own risk.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14259
diff changeset
    61
 *  This code and its internal interfaces are subject to change or
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14259
diff changeset
    62
 *  deletion without notice.</b>
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    63
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    64
 * @author Jamie Ho
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    65
 * @author Bhavesh Patel (Modified)
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    66
 */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    67
public abstract class MemberSummaryBuilder extends AbstractMemberBuilder {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    68
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    69
    /*
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    70
     * Comparator used to sort the members in the summary.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    71
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    72
    private final Comparator<Element> comparator;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    73
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    74
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    75
     * The member summary writers for the given class.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    76
     */
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    77
    private final EnumMap<VisibleMemberTable.Kind, MemberSummaryWriter> memberSummaryWriters;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    78
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    79
    final PropertyHelper pHelper;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    80
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    81
    /**
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    82
     * Construct a new MemberSummaryBuilder.
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    83
     *
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    84
     * @param context       the build context.
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
    85
     * @param typeElement   the type element.
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    86
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
    87
    private MemberSummaryBuilder(Context context, TypeElement typeElement) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    88
        super(context, typeElement);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    89
        memberSummaryWriters = new EnumMap<>(VisibleMemberTable.Kind.class);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    90
        comparator = utils.makeIndexUseComparator();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
    91
        pHelper = new PropertyHelper(this);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    92
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    93
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    94
    /**
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
    95
     * Construct a new MemberSummaryBuilder for a general type.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    96
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    97
     * @param classWriter   the writer for the class whose members are being
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
    98
     *                      summarized.
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
    99
     * @param context       the build context.
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   100
     * @return              the instance
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   101
     */
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   102
    public static MemberSummaryBuilder getInstance(
40587
1c355ea550ed 8164130: Simplify doclet IOException handling
jjg
parents: 35426
diff changeset
   103
            ClassWriter classWriter, Context context) {
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   104
        MemberSummaryBuilder builder = new MemberSummaryBuilder(context, classWriter.getTypeElement()) {
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   105
            @Override
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   106
            public void build(Content contentTree) {
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   107
                buildPropertiesSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   108
                buildNestedClassesSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   109
                buildEnumConstantsSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   110
                buildFieldsSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   111
                buildConstructorsSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   112
                buildMethodsSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   113
            }
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   114
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   115
            @Override
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   116
            public boolean hasMembersToDocument() {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   117
                return visibleMemberTable.hasVisibleMembers();
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   118
            }
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   119
        };
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
   120
        WriterFactory wf = context.configuration.getWriterFactory();
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   121
        for (VisibleMemberTable.Kind kind : VisibleMemberTable.Kind.values()) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   122
            MemberSummaryWriter msw = builder.getVisibleMemberTable().hasVisibleMembers(kind)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   123
                    ? wf.getMemberSummaryWriter(classWriter, kind)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   124
                    : null;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   125
            builder.memberSummaryWriters.put(kind, msw);
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
   126
        }
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   127
        return builder;
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   128
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   129
06bc494ca11e Initial load
duke
parents:
diff changeset
   130
    /**
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   131
     * Construct a new MemberSummaryBuilder for an annotation type.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   132
     *
06bc494ca11e Initial load
duke
parents:
diff changeset
   133
     * @param annotationTypeWriter the writer for the class whose members are
06bc494ca11e Initial load
duke
parents:
diff changeset
   134
     *                             being summarized.
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   135
     * @param context       the build context.
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   136
     * @return              the instance
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   137
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   138
    public static MemberSummaryBuilder getInstance(
40587
1c355ea550ed 8164130: Simplify doclet IOException handling
jjg
parents: 35426
diff changeset
   139
            AnnotationTypeWriter annotationTypeWriter, Context context) {
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
   140
        MemberSummaryBuilder builder = new MemberSummaryBuilder(context,
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   141
                annotationTypeWriter.getAnnotationTypeElement()) {
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   142
            @Override
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   143
            public void build(Content contentTree) {
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   144
                buildAnnotationTypeFieldsSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   145
                buildAnnotationTypeRequiredMemberSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   146
                buildAnnotationTypeOptionalMemberSummary(contentTree);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   147
            }
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   148
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   149
            @Override
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   150
            public boolean hasMembersToDocument() {
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   151
                return !utils.getAnnotationMembers(typeElement).isEmpty();
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   152
            }
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   153
        };
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
   154
        WriterFactory wf = context.configuration.getWriterFactory();
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   155
        for (VisibleMemberTable.Kind kind : VisibleMemberTable.Kind.values()) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   156
            MemberSummaryWriter msw = builder.getVisibleMemberTable().hasVisibleMembers(kind)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   157
                    ? wf.getMemberSummaryWriter(annotationTypeWriter, kind)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   158
                    : null;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   159
            builder.memberSummaryWriters.put(kind, msw);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   160
        }
14542
7062120649c2 8000800: javadoc uses static non-final fields
jjg
parents: 14260
diff changeset
   161
        return builder;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   162
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   163
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   164
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   165
     * Return the specified visible member map.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   166
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   167
     * @return the specified visible member map.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   168
     * @throws ArrayIndexOutOfBoundsException when the type is invalid.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   169
     * @see VisibleMemberTable
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   170
     */
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   171
    public VisibleMemberTable getVisibleMemberTable() {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   172
        return visibleMemberTable;
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   173
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   174
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   175
    /**.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   176
     * Return the specified member summary writer.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   177
     *
44460
9adfc635dd7b 8177567: cache VisibleMemberMap
ksrini
parents: 44385
diff changeset
   178
     * @param kind the kind of member summary writer to return.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   179
     * @return the specified member summary writer.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   180
     * @throws ArrayIndexOutOfBoundsException when the type is invalid.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   181
     * @see VisibleMemberTable
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   182
     */
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   183
    public MemberSummaryWriter getMemberSummaryWriter(VisibleMemberTable.Kind kind) {
44460
9adfc635dd7b 8177567: cache VisibleMemberMap
ksrini
parents: 44385
diff changeset
   184
        return memberSummaryWriters.get(kind);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   185
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   186
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   187
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   188
     * Returns a list of methods that will be documented for the given class.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   189
     * This information can be used for doclet specific documentation
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   190
     * generation.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   191
     *
44460
9adfc635dd7b 8177567: cache VisibleMemberMap
ksrini
parents: 44385
diff changeset
   192
     * @param kind the kind of elements to return.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   193
     * @return a list of methods that will be documented.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   194
     * @see VisibleMemberTable
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   195
     */
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   196
    public SortedSet<Element> members(VisibleMemberTable.Kind kind) {
42000
8b7412f7eecd 8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents: 41452
diff changeset
   197
        TreeSet<Element> out = new TreeSet<>(comparator);
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   198
        out.addAll(getVisibleMembers(kind));
42000
8b7412f7eecd 8167967: javadoc should identify the ordinal value of enum constants
ksrini
parents: 41452
diff changeset
   199
        return out;
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   200
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   201
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   202
    /**
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   203
     * Returns true if there are members of the given kind, false otherwise.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   204
     * @param kind
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   205
     * @return true if there are members of the given kind, false otherwise
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   206
     */
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   207
    public boolean hasMembers(VisibleMemberTable.Kind kind) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   208
        return !getVisibleMembers(kind).isEmpty();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   209
    }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   210
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   211
    /**
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   212
     * Build the summary for the enum constants.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   213
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   214
     * @param memberSummaryTree the content tree to which the documentation will be added
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   215
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   216
    protected void buildEnumConstantsSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   217
        MemberSummaryWriter writer = memberSummaryWriters.get(ENUM_CONSTANTS);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   218
        addSummary(writer, ENUM_CONSTANTS, false, memberSummaryTree);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   219
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   220
06bc494ca11e Initial load
duke
parents:
diff changeset
   221
    /**
20237
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   222
     * Build the summary for fields.
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   223
     *
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   224
     * @param memberSummaryTree the content tree to which the documentation will be added
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   225
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   226
    protected void buildAnnotationTypeFieldsSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   227
        MemberSummaryWriter writer = memberSummaryWriters.get(ANNOTATION_TYPE_FIELDS);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   228
        addSummary(writer, ANNOTATION_TYPE_FIELDS, false, memberSummaryTree);
20237
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   229
    }
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   230
b6d89903c867 8015249: javadoc fails to document static final fields in annotation types
bpatel
parents: 18659
diff changeset
   231
    /**
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   232
     * Build the summary for the optional members.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   233
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   234
     * @param memberSummaryTree the content tree to which the documentation will be added
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   235
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   236
    protected void buildAnnotationTypeOptionalMemberSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   237
        MemberSummaryWriter writer = memberSummaryWriters.get(ANNOTATION_TYPE_MEMBER_OPTIONAL);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   238
        addSummary(writer, ANNOTATION_TYPE_MEMBER_OPTIONAL, false, memberSummaryTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   239
    }
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   240
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   241
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   242
     * Build the summary for the optional members.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   243
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   244
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   245
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   246
    protected void buildAnnotationTypeRequiredMemberSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   247
        MemberSummaryWriter writer = memberSummaryWriters.get(ANNOTATION_TYPE_MEMBER_REQUIRED);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   248
        addSummary(writer, ANNOTATION_TYPE_MEMBER_REQUIRED, false, memberSummaryTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   249
    }
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   250
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   251
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   252
     * Build the summary for the fields.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   253
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   254
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   255
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   256
    protected void buildFieldsSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   257
        MemberSummaryWriter writer = memberSummaryWriters.get(FIELDS);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   258
        addSummary(writer, FIELDS, true, memberSummaryTree);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   259
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   260
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   261
    /**
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   262
     * Build the summary for the fields.
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   263
     *
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   264
     * @param memberSummaryTree the content tree to which the documentation will be added
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   265
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   266
    protected void buildPropertiesSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   267
        MemberSummaryWriter writer = memberSummaryWriters.get(PROPERTIES);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   268
        addSummary(writer, PROPERTIES, true, memberSummaryTree);
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   269
    }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   270
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   271
    /**
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   272
     * Build the summary for the nested classes.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   273
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   274
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   275
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   276
    protected void buildNestedClassesSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   277
        MemberSummaryWriter writer = memberSummaryWriters.get(INNER_CLASSES);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   278
        addSummary(writer, INNER_CLASSES, true, memberSummaryTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   279
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   280
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   281
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   282
     * Build the method summary.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   283
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   284
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   285
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   286
    protected void buildMethodsSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   287
        MemberSummaryWriter writer = memberSummaryWriters.get(METHODS);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   288
        addSummary(writer, METHODS, true, memberSummaryTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   289
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   290
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   291
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   292
     * Build the constructor summary.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   293
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   294
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   295
     */
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   296
    protected void buildConstructorsSummary(Content memberSummaryTree) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   297
        MemberSummaryWriter writer = memberSummaryWriters.get(CONSTRUCTORS);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   298
        addSummary(writer, CONSTRUCTORS, false, memberSummaryTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   299
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   300
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   301
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   302
     * Build the member summary for the given members.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   303
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   304
     * @param writer the summary writer to write the output.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   305
     * @param kind the kind of  members to summarize.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   306
     * @param summaryTreeList list of content trees to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   307
     */
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   308
    private void buildSummary(MemberSummaryWriter writer,
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   309
            VisibleMemberTable.Kind kind, LinkedList<Content> summaryTreeList) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   310
        SortedSet<? extends Element> members = asSortedSet(getVisibleMembers(kind));
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   311
        if (!members.isEmpty()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   312
            for (Element member : members) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   313
                final Element property = pHelper.getPropertyElement(member);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   314
                if (property != null) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   315
                    processProperty(member, property);
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   316
                }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   317
                List<? extends DocTree> firstSentenceTags = utils.getFirstSentenceTrees(member);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   318
                if (utils.isExecutableElement(member) && firstSentenceTags.isEmpty()) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   319
                    //Inherit comments from overriden or implemented method if
06bc494ca11e Initial load
duke
parents:
diff changeset
   320
                    //necessary.
06bc494ca11e Initial load
duke
parents:
diff changeset
   321
                    DocFinder.Output inheritedDoc =
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   322
                            DocFinder.search(configuration,
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   323
                                    new DocFinder.Input(utils, (ExecutableElement) member));
14549
0599d73bf1da 8002304: Group methods by types in methods summary section
bpatel
parents: 14542
diff changeset
   324
                    if (inheritedDoc.holder != null
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   325
                            && !utils.getFirstSentenceTrees(inheritedDoc.holder).isEmpty()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   326
                        // let the comment helper know of the overridden element
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   327
                        CommentHelper ch = utils.getCommentHelper(member);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   328
                        ch.setOverrideElement(inheritedDoc.holder);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   329
                        firstSentenceTags = utils.getFirstSentenceTrees(inheritedDoc.holder);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   330
                    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   331
                }
47846
4e78aba768f0 8190295: Introduce a new Table builder class
jjg
parents: 47450
diff changeset
   332
                writer.addMemberSummary(typeElement, member, firstSentenceTags);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   333
            }
47846
4e78aba768f0 8190295: Introduce a new Table builder class
jjg
parents: 47450
diff changeset
   334
            summaryTreeList.add(writer.getSummaryTableTree(typeElement));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   335
        }
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   336
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   337
06bc494ca11e Initial load
duke
parents:
diff changeset
   338
    /**
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   339
     * Process the property method, property setter and/or property getter
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   340
     * comment text so that it contains the documentation from
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   341
     * the property field. The method adds the leading sentence,
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   342
     * copied documentation including the defaultValue tag and
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   343
     * the see tags if the appropriate property getter and setter are
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   344
     * available.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   345
     *
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   346
     * @param member the member which is to be augmented.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   347
     * @param property the original property documentation.
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   348
     */
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   349
    private void processProperty(Element member,
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   350
                                 Element property) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   351
        CommentUtils cmtutils = configuration.cmtUtils;
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   352
        final boolean isSetter = isSetter(member);
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   353
        final boolean isGetter = isGetter(member);
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   354
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   355
        List<DocTree> fullBody = new ArrayList<>();
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   356
        List<DocTree> blockTags = new ArrayList<>();
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   357
        if (isGetter || isSetter) {
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   358
            //add "[GS]ets the value of the property PROPERTY_NAME."
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   359
            if (isSetter) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   360
                String text = MessageFormat.format(
52644
43efb4ca6d6c 8214139: Remove wrapper methods from {Base,Html}Configuration
jjg
parents: 49879
diff changeset
   361
                        resources.getText("doclet.PropertySetterWithName"),
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   362
                        utils.propertyName((ExecutableElement)member));
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   363
                fullBody.addAll(cmtutils.makeFirstSentenceTree(text));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   364
            }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   365
            if (isGetter) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   366
                String text = MessageFormat.format(
52644
43efb4ca6d6c 8214139: Remove wrapper methods from {Base,Html}Configuration
jjg
parents: 49879
diff changeset
   367
                        resources.getText("doclet.PropertyGetterWithName"),
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   368
                        utils.propertyName((ExecutableElement) member));
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   369
                fullBody.addAll(cmtutils.makeFirstSentenceTree(text));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   370
            }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   371
            List<? extends DocTree> propertyTags = utils.getBlockTags(property, "propertyDescription");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   372
            if (propertyTags.isEmpty()) {
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   373
                List<? extends DocTree> comment = utils.getFullBody(property);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   374
                blockTags.addAll(cmtutils.makePropertyDescriptionTree(comment));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   375
            }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   376
        } else {
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   377
            fullBody.addAll(utils.getFullBody(property));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   378
        }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   379
18659
5fe5650da7f9 8015720: since tag isn't copied while generating JavaFX documentation
janvalenta
parents: 16319
diff changeset
   380
        // copy certain tags
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   381
        List<? extends DocTree> tags = utils.getBlockTags(property, Kind.SINCE);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   382
        blockTags.addAll(tags);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   383
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   384
        List<? extends DocTree> bTags = utils.getBlockTags(property, Kind.UNKNOWN_BLOCK_TAG);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   385
        CommentHelper ch = utils.getCommentHelper(property);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   386
        for (DocTree dt : bTags) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   387
            String tagName = ch.getTagName(dt);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   388
            if ( "defaultValue".equals(tagName)) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   389
                blockTags.add(dt);
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   390
            }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   391
        }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   392
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   393
        //add @see tags
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   394
        if (!isGetter && !isSetter) {
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   395
            ExecutableElement getter = pHelper.getGetterForProperty((ExecutableElement)member);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   396
            ExecutableElement setter = pHelper.getSetterForProperty((ExecutableElement)member);
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   397
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   398
            if (null != getter) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   399
                StringBuilder sb = new StringBuilder("#");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   400
                sb.append(utils.getSimpleName(getter)).append("()");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   401
                blockTags.add(cmtutils.makeSeeTree(sb.toString(), getter));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   402
            }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   403
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   404
            if (null != setter) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   405
                VariableElement param = setter.getParameters().get(0);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   406
                StringBuilder sb = new StringBuilder("#");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   407
                sb.append(utils.getSimpleName(setter));
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   408
                if (!utils.isTypeVariable(param.asType())) {
44385
f777a2822087 8176231: javadoc -javafx creates bad link when Property is an array of objects
jjg
parents: 42827
diff changeset
   409
                    sb.append("(").append(utils.getTypeSignature(param.asType(), false, true)).append(")");
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   410
                }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   411
                blockTags.add(cmtutils.makeSeeTree(sb.toString(), setter));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   412
            }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   413
        }
41452
ddaef4bba083 8165991: Fix DocTreeFactory newDocCommentTree
ksrini
parents: 40587
diff changeset
   414
        cmtutils.setDocCommentTree(member, fullBody, blockTags, utils);
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   415
    }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   416
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   417
    /**
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   418
     * Test whether the method is a getter.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   419
     * @param element property method documentation. Needs to be either property
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   420
     * method, property getter, or property setter.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   421
     * @return true if the given documentation belongs to a getter.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   422
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   423
    private boolean isGetter(Element element) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   424
        final String pedName = element.getSimpleName().toString();
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   425
        return pedName.startsWith("get") || pedName.startsWith("is");
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   426
    }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   427
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   428
    /**
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   429
     * Test whether the method is a setter.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   430
     * @param element property method documentation. Needs to be either property
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   431
     * method, property getter, or property setter.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   432
     * @return true if the given documentation belongs to a setter.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   433
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   434
    private boolean isSetter(Element element) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   435
        return element.getSimpleName().toString().startsWith("set");
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   436
    }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   437
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14549
diff changeset
   438
    /**
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   439
     * Build the inherited member summary for the given methods.
06bc494ca11e Initial load
duke
parents:
diff changeset
   440
     *
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   441
     * @param writer the writer for this member summary.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   442
     * @param kind the kind of members to document.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   443
     * @param summaryTreeList list of content trees to which the documentation will be added
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   444
     */
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   445
    private void buildInheritedSummary(MemberSummaryWriter writer,
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   446
            VisibleMemberTable.Kind kind, LinkedList<Content> summaryTreeList) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   447
        VisibleMemberTable visibleMemberTable = getVisibleMemberTable();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   448
        SortedSet<? extends Element> inheritedMembersFromMap = asSortedSet(visibleMemberTable.getAllVisibleMembers(kind));
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   449
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   450
        for (TypeElement inheritedClass : visibleMemberTable.getVisibleTypeElements()) {
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   451
            if (!(utils.isPublic(inheritedClass) || utils.isLinkable(inheritedClass))) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   452
                continue;
06bc494ca11e Initial load
duke
parents:
diff changeset
   453
            }
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   454
            if (inheritedClass == typeElement) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   455
                continue;
06bc494ca11e Initial load
duke
parents:
diff changeset
   456
            }
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   457
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   458
            List<Element> members = inheritedMembersFromMap.stream()
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   459
                    .filter(e -> utils.getEnclosingTypeElement(e) == inheritedClass)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   460
                    .collect(Collectors.toList());
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   461
            if (!members.isEmpty()) {
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   462
                SortedSet<Element> inheritedMembers = new TreeSet<>(comparator);
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   463
                inheritedMembers.addAll(members);
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   464
                Content inheritedTree = writer.getInheritedSummaryHeader(inheritedClass);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   465
                Content linksTree = writer.getInheritedSummaryLinksTree();
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   466
                addSummaryFootNote(inheritedClass, inheritedMembers, linksTree, writer);
54060
53a95878619f 8220202: Simplify/standardize method naming for HtmlTree
jjg
parents: 52644
diff changeset
   467
                inheritedTree.add(linksTree);
54596
86c1da00dd6a 8219998: Eliminate inherently singleton lists
pmuthuswamy
parents: 54060
diff changeset
   468
                summaryTreeList.add(inheritedTree);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   469
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   470
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   471
    }
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   472
47395
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   473
    private void addSummaryFootNote(TypeElement inheritedClass, SortedSet<Element> inheritedMembers,
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   474
                                    Content linksTree, MemberSummaryWriter writer) {
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   475
        for (Element member : inheritedMembers) {
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   476
            TypeElement t = (utils.isPackagePrivate(inheritedClass) && !utils.isLinkable(inheritedClass))
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   477
                    ? typeElement : inheritedClass;
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   478
            writer.addInheritedMemberSummary(t, member, inheritedMembers.first() == member,
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   479
                    inheritedMembers.last() == member, linksTree);
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   480
        }
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   481
    }
2ea4edfdef8e 8157000: Do not generate javadoc for overridden method with no spec change
ksrini
parents: 47216
diff changeset
   482
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   483
    /**
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   484
     * Add the summary for the documentation.
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   485
     *
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   486
     * @param writer the writer for this member summary.
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   487
     * @param kind the kind of members to document.
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   488
     * @param showInheritedSummary true if inherited summary should be documented
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   489
     * @param memberSummaryTree the content tree to which the documentation will be added
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   490
     */
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   491
    private void addSummary(MemberSummaryWriter writer,
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   492
            VisibleMemberTable.Kind kind, boolean showInheritedSummary,
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   493
            Content memberSummaryTree) {
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   494
        LinkedList<Content> summaryTreeList = new LinkedList<>();
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   495
        buildSummary(writer, kind, summaryTreeList);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   496
        if (showInheritedSummary)
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   497
            buildInheritedSummary(writer, kind, summaryTreeList);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   498
        if (!summaryTreeList.isEmpty()) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 29957
diff changeset
   499
            Content memberTree = writer.getMemberSummaryHeader(typeElement, memberSummaryTree);
54060
53a95878619f 8220202: Simplify/standardize method naming for HtmlTree
jjg
parents: 52644
diff changeset
   500
            summaryTreeList.stream().forEach(memberTree::add);
29957
7740f9657f56 8072945: Javadoc should generate valid and compliant HTML5 output
bpatel
parents: 25874
diff changeset
   501
            writer.addMemberTree(memberSummaryTree, memberTree);
7614
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   502
        }
cfadc977ca75 6851834: Javadoc doclet needs a structured approach to generate the output HTML.
bpatel
parents: 5855
diff changeset
   503
    }
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   504
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   505
    private SortedSet<? extends Element> asSortedSet(Collection<? extends Element> members) {
45599
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   506
        SortedSet<Element> out = new TreeSet<>(comparator);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   507
        out.addAll(members);
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   508
        return out;
8bc3a019f948 8149146: [javadoc] eliminate doclet.xml
jjg
parents: 44460
diff changeset
   509
    }
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   510
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   511
    static class PropertyHelper {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   512
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   513
        private final Map<Element, Element> classPropertiesMap = new HashMap<>();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   514
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   515
        private final MemberSummaryBuilder  builder;
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   516
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   517
        PropertyHelper(MemberSummaryBuilder builder) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   518
            this.builder = builder;
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   519
            computeProperties();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   520
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   521
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   522
        private void computeProperties() {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   523
            VisibleMemberTable vmt = builder.getVisibleMemberTable();
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   524
            List<ExecutableElement> props = ElementFilter.methodsIn(vmt.getVisibleMembers(PROPERTIES));
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   525
            for (ExecutableElement propertyMethod : props) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   526
                ExecutableElement getter = vmt.getPropertyGetter(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   527
                ExecutableElement setter = vmt.getPropertySetter(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   528
                VariableElement field = vmt.getPropertyField(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   529
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   530
                addToPropertiesMap(propertyMethod, field, getter, setter);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   531
            }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   532
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   533
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   534
        private void addToPropertiesMap(ExecutableElement propertyMethod,
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   535
                                        VariableElement field,
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   536
                                        ExecutableElement getter,
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   537
                                        ExecutableElement setter) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   538
            if (field == null || builder.utils.getDocCommentTree(field) == null) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   539
                addToPropertiesMap(propertyMethod, propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   540
                addToPropertiesMap(getter, propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   541
                addToPropertiesMap(setter, propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   542
            } else {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   543
                addToPropertiesMap(propertyMethod, field);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   544
                addToPropertiesMap(getter, field);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   545
                addToPropertiesMap(setter, field);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   546
            }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   547
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   548
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   549
        private void addToPropertiesMap(Element propertyMethod,
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   550
                                        Element commentSource) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   551
            if (null == propertyMethod || null == commentSource) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   552
                return;
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   553
            }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   554
            DocCommentTree docTree = builder.utils.getDocCommentTree(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   555
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   556
            /* The second condition is required for the property buckets. In
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   557
             * this case the comment is at the property method (not at the field)
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   558
             * and it needs to be listed in the map.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   559
             */
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   560
            if ((docTree == null) || propertyMethod.equals(commentSource)) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   561
                classPropertiesMap.put(propertyMethod, commentSource);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   562
            }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   563
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   564
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   565
        /**
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   566
         * Returns the property field documentation belonging to the given member.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   567
         * @param element the member for which the property documentation is needed.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   568
         * @return the property field documentation, null if there is none.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   569
         */
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   570
        public Element getPropertyElement(Element element) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   571
            return classPropertiesMap.get(element);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   572
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   573
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   574
        /**
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   575
         * Returns the getter documentation belonging to the given property method.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   576
         * @param propertyMethod the method for which the getter is needed.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   577
         * @return the getter documentation, null if there is none.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   578
         */
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   579
        public ExecutableElement getGetterForProperty(ExecutableElement propertyMethod) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   580
            return builder.getVisibleMemberTable().getPropertyGetter(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   581
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   582
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   583
        /**
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   584
         * Returns the setter documentation belonging to the given property method.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   585
         * @param propertyMethod the method for which the setter is needed.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   586
         * @return the setter documentation, null if there is none.
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   587
         */
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   588
        public ExecutableElement getSetterForProperty(ExecutableElement propertyMethod) {
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   589
            return builder.getVisibleMemberTable().getPropertySetter(propertyMethod);
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   590
        }
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48257
diff changeset
   591
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   592
}