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

Thu, 15 Nov 2012 09:18:36 -0800

author
jjg
date
Thu, 15 Nov 2012 09:18:36 -0800
changeset 1410
bfec2a1cc869
parent 1383
b980e8e6aabf
child 1568
5f0731e4e5e6
permissions
-rw-r--r--

8000800: javadoc uses static non-final fields
Reviewed-by: bpatel

     1 /*
     2  * Copyright (c) 2003, 2012, 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;
    28 import com.sun.javadoc.*;
    29 import com.sun.tools.doclets.internal.toolkit.builders.*;
    30 import com.sun.tools.doclets.internal.toolkit.util.*;
    31 import java.io.File;
    32 import java.util.StringTokenizer;
    34 /**
    35  * An abstract implementation of a Doclet.
    36  *
    37  *  <p><b>This is NOT part of any supported API.
    38  *  If you write code that depends on this, you do so at your own risk.
    39  *  This code and its internal interfaces are subject to change or
    40  *  deletion without notice.</b>
    41  *
    42  * @author Jamie Ho
    43  */
    44 public abstract class AbstractDoclet {
    46     /**
    47      * The global configuration information for this run.
    48      */
    49     public Configuration configuration;
    51     /**
    52      * The only doclet that may use this toolkit is {@value}
    53      */
    54     private static final String TOOLKIT_DOCLET_NAME =
    55         com.sun.tools.doclets.formats.html.HtmlDoclet.class.getName();
    57     /**
    58      * Verify that the only doclet that is using this toolkit is
    59      * {@value #TOOLKIT_DOCLET_NAME}.
    60      */
    61     private boolean isValidDoclet(AbstractDoclet doclet) {
    62         if (! doclet.getClass().getName().equals(TOOLKIT_DOCLET_NAME)) {
    63             configuration.message.error("doclet.Toolkit_Usage_Violation",
    64                 TOOLKIT_DOCLET_NAME);
    65             return false;
    66         }
    67         return true;
    68     }
    70     /**
    71      * The method that starts the execution of the doclet.
    72      *
    73      * @param doclet the doclet to start the execution for.
    74      * @param root   the {@link RootDoc} that points to the source to document.
    75      * @return true if the doclet executed without error.  False otherwise.
    76      */
    77     public boolean start(AbstractDoclet doclet, RootDoc root) {
    78         configuration = configuration();
    79         configuration.root = root;
    80         if (! isValidDoclet(doclet)) {
    81             return false;
    82         }
    83         try {
    84             doclet.startGeneration(root);
    85         } catch (Exception exc) {
    86             exc.printStackTrace();
    87             return false;
    88         }
    89         return true;
    90     }
    92     /**
    93      * Indicate that this doclet supports the 1.5 language features.
    94      * @return JAVA_1_5, indicating that the new features are supported.
    95      */
    96     public static LanguageVersion languageVersion() {
    97         return LanguageVersion.JAVA_1_5;
    98     }
   101     /**
   102      * Create the configuration instance and returns it.
   103      * @return the configuration of the doclet.
   104      */
   105     public abstract Configuration configuration();
   107     /**
   108      * Start the generation of files. Call generate methods in the individual
   109      * writers, which will in turn generate the documentation files. Call the
   110      * TreeWriter generation first to ensure the Class Hierarchy is built
   111      * first and then can be used in the later generation.
   112      *
   113      * @see com.sun.javadoc.RootDoc
   114      */
   115     private void startGeneration(RootDoc root) throws Exception {
   116         if (root.classes().length == 0) {
   117             configuration.message.
   118                 error("doclet.No_Public_Classes_To_Document");
   119             return;
   120         }
   121         configuration.setOptions();
   122         configuration.getDocletSpecificMsg().notice("doclet.build_version",
   123             configuration.getDocletSpecificBuildDate());
   124         ClassTree classtree = new ClassTree(configuration, configuration.nodeprecated);
   126         generateClassFiles(root, classtree);
   127         Util.copyDocFiles(configuration, DocPaths.DOC_FILES);
   129         PackageListWriter.generate(configuration);
   130         generatePackageFiles(classtree);
   132         generateOtherFiles(root, classtree);
   133         configuration.tagletManager.printReport();
   134     }
   136     /**
   137      * Generate additional documentation that is added to the API documentation.
   138      *
   139      * @param root      the RootDoc of source to document.
   140      * @param classtree the data structure representing the class tree.
   141      */
   142     protected void generateOtherFiles(RootDoc root, ClassTree classtree) throws Exception {
   143         BuilderFactory builderFactory = configuration.getBuilderFactory();
   144         AbstractBuilder constantsSummaryBuilder = builderFactory.getConstantsSummaryBuider();
   145         constantsSummaryBuilder.build();
   146         AbstractBuilder serializedFormBuilder = builderFactory.getSerializedFormBuilder();
   147         serializedFormBuilder.build();
   148     }
   150     /**
   151      * Generate the package documentation.
   152      *
   153      * @param classtree the data structure representing the class tree.
   154      */
   155     protected abstract void generatePackageFiles(ClassTree classtree) throws Exception;
   157     /**
   158      * Generate the class documentation.
   159      *
   160      * @param classtree the data structure representing the class tree.
   161      */
   162     protected abstract void generateClassFiles(ClassDoc[] arr, ClassTree classtree);
   164     /**
   165      * Iterate through all classes and construct documentation for them.
   166      *
   167      * @param root      the RootDoc of source to document.
   168      * @param classtree the data structure representing the class tree.
   169      */
   170     protected void generateClassFiles(RootDoc root, ClassTree classtree) {
   171         generateClassFiles(classtree);
   172         PackageDoc[] packages = root.specifiedPackages();
   173         for (int i = 0; i < packages.length; i++) {
   174             generateClassFiles(packages[i].allClasses(), classtree);
   175         }
   176     }
   178     /**
   179      * Generate the class files for single classes specified on the command line.
   180      *
   181      * @param classtree the data structure representing the class tree.
   182      */
   183     private void generateClassFiles(ClassTree classtree) {
   184         String[] packageNames = configuration.classDocCatalog.packageNames();
   185         for (int packageNameIndex = 0; packageNameIndex < packageNames.length;
   186                 packageNameIndex++) {
   187             generateClassFiles(configuration.classDocCatalog.allClasses(
   188                 packageNames[packageNameIndex]), classtree);
   189         }
   190     }
   191 }

mercurial