Package com.puppycrawl.tools.checkstyle.doclets

Source Code of com.puppycrawl.tools.checkstyle.doclets.TokenTypesDoclet

////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2005  Oliver Burn
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle.doclets;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.DocErrorReporter;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.RootDoc;

/**
* Doclet which is used to write property file with short descriptions
* (first sentences) of TokenTypes' constants.
*
* @author o_sukhodolsky
*/
public class TokenTypesDoclet
{
    /** Command line option to specify file to write output of the doclet. */
    private static final String DEST_FILE_OPT = "-destfile";

    /**
     * The doclet's starter method.
     * @param aRoot <code>RootDoc</code> given to the doclet
     * @exception FileNotFoundException will be thrown if the doclet
     *            will be unable to write to the specified file.
     * @return true if the given <code>RootDoc</code> is processed.
     */
    public static boolean start(RootDoc aRoot) throws FileNotFoundException
    {
        String fileName = getDestFileName(aRoot.options());
        FileOutputStream fos = new FileOutputStream(fileName);
        PrintStream ps = new PrintStream(fos);
        ClassDoc[] classes = aRoot.classes();
        if (classes.length != 1 || !classes[0].name().equals("TokenTypes")) {
            final String message =
                "The doclet should be used for TokenTypes only";
            throw new IllegalArgumentException(message);
        }

        FieldDoc[] fields = classes[0].fields();
        for (int j = 0; j < fields.length; j++) {
            final FieldDoc field = fields[j];
            if (field.isStatic() && field.isPublic() && field.isFinal()
                && "int".equals((field.type().qualifiedTypeName())))
            {
                if (field.firstSentenceTags().length != 1) {
                    final String message = "Should be only one tag.";
                    throw new IllegalArgumentException(message);
                }
                ps.println(field.name() + "="
                           + field.firstSentenceTags()[0].text());
            }
        }

        ps.close();
        return true;
    }

    /**
     * Returns option length (how many parts are in option).
     * @param aOption option name to process
     * @return option length (how many parts are in option).
     */
    public static int optionLength(String aOption)
    {
        if (DEST_FILE_OPT.equals(aOption)) {
            return 2;
        }
        return 0;
    }

    /**
     * Checks that only valid options was specified.
     * @param aOptions all parsed options
     * @param aReporter the reporter to report errors.
     * @return true if only valid options was specified
     */
    public static boolean validOptions(String aOptions[][],
                                       DocErrorReporter aReporter)
    {
        boolean foundDestFileOption = false;
        for (int i = 0; i < aOptions.length; i++) {
            String[] opt = aOptions[i];
            if (DEST_FILE_OPT.equals(opt[0])) {
                if (foundDestFileOption) {
                    aReporter.printError("Only one -destfile option allowed.");
                    return false;
                }
                foundDestFileOption = true;
            }
        }
        if (!foundDestFileOption) {
            final String message =
                "Usage: javadoc -destfile file -doclet TokenTypesDoclet ...";
            aReporter.printError(message);
        }
        return foundDestFileOption;
    }

    /**
     * Reads destination file name.
     * @param aOptions all specified options.
     * @return destination file name
     */
    private static String getDestFileName(String[][] aOptions)
    {
        String fileName = null;
        for (int i = 0; i < aOptions.length; i++) {
            String[] opt = aOptions[i];
            if (DEST_FILE_OPT.equals(opt[0])) {
                fileName = opt[1];
            }
        }
        return fileName;
    }
}
TOP

Related Classes of com.puppycrawl.tools.checkstyle.doclets.TokenTypesDoclet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.