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

Tue, 25 May 2010 15:54:51 -0700

author
ohair
date
Tue, 25 May 2010 15:54:51 -0700
changeset 554
9d9f26857129
parent 184
905e151a185a
child 589
4177f5bdd189
permissions
-rw-r--r--

6943119: Rebrand source copyright notices
Reviewed-by: darcy

     1 /*
     2  * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package com.sun.tools.doclets.internal.toolkit.builders;
    28 import com.sun.tools.doclets.internal.toolkit.util.*;
    29 import com.sun.tools.doclets.internal.toolkit.*;
    30 import com.sun.javadoc.*;
    31 import java.util.*;
    32 import java.lang.reflect.*;
    34 /**
    35  * Builds documentation for a enum constants.
    36  *
    37  * This code is not part of an API.
    38  * It is implementation that is subject to change.
    39  * Do not use it as an API
    40  *
    41  * @author Jamie Ho
    42  * @since 1.5
    43  */
    44 public class EnumConstantBuilder extends AbstractMemberBuilder {
    46         /**
    47          * The class whose enum constants are being documented.
    48          */
    49         private ClassDoc classDoc;
    51         /**
    52          * The visible enum constantss for the given class.
    53          */
    54         private VisibleMemberMap visibleMemberMap;
    56         /**
    57          * The writer to output the enum constants documentation.
    58          */
    59         private EnumConstantWriter writer;
    61         /**
    62          * The list of enum constants being documented.
    63          */
    64         private List<ProgramElementDoc> enumConstants;
    66         /**
    67          * The index of the current enum constant that is being documented at this point
    68          * in time.
    69          */
    70         private int currentEnumConstantsIndex;
    72         /**
    73          * Construct a new EnumConstantsBuilder.
    74          *
    75          * @param configuration the current configuration of the
    76          *                      doclet.
    77          */
    78         private EnumConstantBuilder(Configuration configuration) {
    79                 super(configuration);
    80         }
    82         /**
    83          * Construct a new EnumConstantsBuilder.
    84          *
    85          * @param configuration the current configuration of the doclet.
    86          * @param classDoc the class whoses members are being documented.
    87          * @param writer the doclet specific writer.
    88          */
    89         public static EnumConstantBuilder getInstance(
    90                 Configuration configuration,
    91                 ClassDoc classDoc,
    92                 EnumConstantWriter writer) {
    93                 EnumConstantBuilder builder = new EnumConstantBuilder(configuration);
    94                 builder.classDoc = classDoc;
    95                 builder.writer = writer;
    96                 builder.visibleMemberMap =
    97                         new VisibleMemberMap(
    98                                 classDoc,
    99                                 VisibleMemberMap.ENUM_CONSTANTS,
   100                                 configuration.nodeprecated);
   101                 builder.enumConstants =
   102                         new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
   103                 if (configuration.getMemberComparator() != null) {
   104                         Collections.sort(
   105                                 builder.enumConstants,
   106                                 configuration.getMemberComparator());
   107                 }
   108                 return builder;
   109         }
   111         /**
   112          * {@inheritDoc}
   113          */
   114         public String getName() {
   115                 return "EnumConstantDetails";
   116         }
   118         /**
   119          * {@inheritDoc}
   120          */
   121         public void invokeMethod(
   122                 String methodName,
   123                 Class<?>[] paramClasses,
   124                 Object[] params)
   125                 throws Exception {
   126                 if (DEBUG) {
   127                         configuration.root.printError(
   128                                 "DEBUG: " + this.getClass().getName() + "." + methodName);
   129                 }
   130                 Method method = this.getClass().getMethod(methodName, paramClasses);
   131                 method.invoke(this, params);
   132         }
   134         /**
   135          * Returns a list of enum constants that will be documented for the given class.
   136          * This information can be used for doclet specific documentation
   137          * generation.
   138          *
   139          * @param classDoc the {@link ClassDoc} we want to check.
   140          * @return a list of enum constants that will be documented.
   141          */
   142         public List<ProgramElementDoc> members(ClassDoc classDoc) {
   143                 return visibleMemberMap.getMembersFor(classDoc);
   144         }
   146         /**
   147          * Returns the visible member map for the enum constants of this class.
   148          *
   149          * @return the visible member map for the enum constants of this class.
   150          */
   151         public VisibleMemberMap getVisibleMemberMap() {
   152                 return visibleMemberMap;
   153         }
   155         /**
   156          * summaryOrder.size()
   157          */
   158         public boolean hasMembersToDocument() {
   159                 return enumConstants.size() > 0;
   160         }
   162         /**
   163          * Build the enum constant documentation.
   164          *
   165          * @param elements the XML elements that specify how to construct this
   166          *                documentation.
   167          */
   168         public void buildEnumConstant(List<?> elements) {
   169                 if (writer == null) {
   170                         return;
   171                 }
   172                 for (currentEnumConstantsIndex = 0;
   173                         currentEnumConstantsIndex < enumConstants.size();
   174                         currentEnumConstantsIndex++) {
   175                         build(elements);
   176                 }
   177         }
   179         /**
   180          * Build the overall header.
   181          */
   182         public void buildHeader() {
   183                 writer.writeHeader(
   184                         classDoc,
   185                         configuration.getText("doclet.Enum_Constant_Detail"));
   186         }
   188         /**
   189          * Build the header for the individual enum constants.
   190          */
   191         public void buildEnumConstantHeader() {
   192                 writer.writeEnumConstantHeader(
   193                         (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
   194                         currentEnumConstantsIndex == 0);
   195         }
   197         /**
   198          * Build the signature.
   199          */
   200         public void buildSignature() {
   201                 writer.writeSignature(
   202                         (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
   203         }
   205         /**
   206          * Build the deprecation information.
   207          */
   208         public void buildDeprecationInfo() {
   209                 writer.writeDeprecated(
   210                         (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
   211         }
   213         /**
   214          * Build the comments for the enum constant.  Do nothing if
   215          * {@link Configuration#nocomment} is set to true.
   216          */
   217         public void buildEnumConstantComments() {
   218                 if (!configuration.nocomment) {
   219                         writer.writeComments(
   220                                 (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
   221                 }
   222         }
   224         /**
   225          * Build the tag information.
   226          */
   227         public void buildTagInfo() {
   228                 writer.writeTags(
   229                         (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
   230         }
   232         /**
   233          * Build the footer for the individual enum constants.
   234          */
   235         public void buildEnumConstantFooter() {
   236                 writer.writeEnumConstantFooter();
   237         }
   239         /**
   240          * Build the overall footer.
   241          */
   242         public void buildFooter() {
   243                 writer.writeFooter(classDoc);
   244         }
   246         /**
   247          * Return the enum constant writer for this builder.
   248          *
   249          * @return the enum constant writer for this builder.
   250          */
   251         public EnumConstantWriter getWriter() {
   252                 return writer;
   253         }
   254 }

mercurial