196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpackage jdiff;
296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.io.*;
496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.util.*;
596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport com.sun.javadoc.*;
696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/**
896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Class to handle options for JDiff.
996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project *
1096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * See the file LICENSE.txt for copyright details.
1196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @author Matthew Doar, mdoar@pobox.com
1296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */
1396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpublic class Options {
1496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
1596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Default constructor. */
1696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public Options() {
1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /**
2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * Returns the "length" of a given option. If an option takes no
2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * arguments, its length is one. If it takes one argument, its
2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * length is two, and so on. This method is called by Javadoc to
2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * parse the options it does not recognize. It then calls
2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * {@link #validOptions} to validate them.
2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * <blockquote>
2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * <b>Note:</b><br>
2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * The options arrive as case-sensitive strings. For options that
2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * are not case-sensitive, use toLowerCase() on the option string
2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * before comparing it.
3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * </blockquote>
3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     *
3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * @param option  a String containing an option
3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     * @return an int telling how many components that option has
3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project     */
3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public static int optionLength(String option) {
3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        String opt = option.toLowerCase();
3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Standard options
3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-authorid"))  return 2;
4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-versionid")) return 2;
4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-d"))         return 2;
4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-classlist")) return 1;
4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-title"))     return 2;
4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-docletid"))  return 1;
4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-evident"))   return 2;
4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-skippkg"))   return 2;
4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-skipclass")) return 2;
4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-execdepth")) return 2;
4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-help"))      return 1;
5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-version"))      return 1;
5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-package"))   return 1;
5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-protected")) return 1;
5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-public"))    return 1;
5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-private"))   return 1;
5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-sourcepath")) return 2;
5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Options to control JDiff
5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-apiname"))    return 2;
5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-oldapi"))    return 2;
6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-newapi"))    return 2;
6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Options to control the location of the XML files
6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-apidir"))       return 2;
6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-oldapidir"))    return 2;
6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-newapidir"))    return 2;
6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-usercommentsdir"))    return 2;
6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Options for the exclusion level for classes and members
7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-excludeclass"))    return 2;
7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-excludemember"))    return 2;
7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-firstsentence"))    return 1;
7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-docchanges"))    return 1;
7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-packagesonly"))    return 1;
7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-showallchanges"))    return 1;
7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option to change the location for the existing Javadoc
7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // documentation for the new API. Default is "../"
8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-javadocnew"))    return 2;
8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option to change the location for the existing Javadoc
8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // documentation for the old API. Default is null.
8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-javadocold"))    return 2;
8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-baseuri"))    return 2;
8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option not to suggest comments at all
8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-nosuggest"))    return 2;
8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option to enable checking that the comments end with a period.
9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-checkcomments"))    return 1;
9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option to retain non-printing characters in comments.
9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-retainnonprinting"))    return 1;
9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Option for the name of the exclude tag
9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-excludetag"))    return 2;
9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Generate statistical output
9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-stats"))    return 1;
9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Set the browser window title
10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-windowtitle"))    return 2;
10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // Set the report title
10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (opt.equals("-doctitle"))    return 2;
10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return 0;
10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }//optionLength()
10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project   /**
10896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * After parsing the available options using {@link #optionLength},
10996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * Javadoc invokes this method with an array of options-arrays, where
11096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * the first item in any array is the option, and subsequent items in
11196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * that array are its arguments. So, if -print is an option that takes
11296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * no arguments, and -copies is an option that takes 1 argument, then
11396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * <pre>
11496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *     -print -copies 3
11596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * </pre>
11696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * produces an array of arrays that looks like:
11796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * <pre>
11896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *      option[0][0] = -print
11996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *      option[1][0] = -copies
12096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *      option[1][1] = 3
12196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * </pre>
12296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * (By convention, command line switches start with a "-", but
12396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * they don't have to.)
12496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * <p>
12596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * <b>Note:</b><br>
12696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * Javadoc passes <i>all</i>parameters to this method, not just
12796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * those that Javadoc doesn't recognize. The only way to
12896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * identify unexpected arguments is therefore to check for every
12996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * Javadoc parameter as well as doclet parameters.
13096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *
13196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * @param options   an array of String arrays, one per option
13296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * @param reporter  a DocErrorReporter for generating error messages
13396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    * @return true if no errors were found, and all options are
13496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    *         valid
13596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    */
13696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public static boolean validOptions(String[][] options,
13796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                                       DocErrorReporter reporter) {
13896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        final DocErrorReporter errOut = reporter;
13996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
14096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // A nice object-oriented way of handling errors. An instance of this
14196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // class puts out an error message and keeps track of whether or not
14296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        // an error was found.
14396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        class ErrorHandler {
14496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            boolean noErrorsFound = true;
14596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            void msg(String msg) {
14696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                noErrorsFound = false;
14796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                errOut.printError(msg);
14896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
14996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
15096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
15196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        ErrorHandler err = new ErrorHandler();
15296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (trace)
15396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println("Command line arguments: ");
15496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        for (int i = 0; i < options.length; i++) {
15596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            for (int j = 0; j < options[i].length; j++) {
15696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                Options.cmdOptions += " " + options[i][j];
15796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (trace)
15896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    System.out.print(" " + options[i][j]);
15996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
16096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
16196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (trace)
16296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            System.out.println();
16396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
16496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        for (int i = 0; i < options.length; i++) {
16596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-apiname")) {
16696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
16796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No version identifier specified after -apiname option.");
16896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else if (JDiff.compareAPIs) {
16996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("Use the -apiname option, or the -oldapi and -newapi options, but not both.");
17096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
17196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String filename = options[i][1];
17296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.apiIdentifier = filename;
17396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    filename = filename.replace(' ', '_');
17496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.outputFileName =  filename + ".xml";
17596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.writeXML = true;
17696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.compareAPIs = false;
17796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
17896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
17996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
18096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-apidir")) {
18196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
18296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No directory specified after -apidir option.");
18396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
18496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project		    RootDocToXML.outputDirectory = options[i][1];
18596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
18696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
18796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
18896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project	    if (options[i][0].toLowerCase().equals("-oldapi")) {
18996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
19096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No version identifier specified after -oldapi option.");
19196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else if (JDiff.writeXML) {
19296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("Use the -apiname or -oldapi option, but not both.");
19396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
19496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String filename = options[i][1];
19596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    filename = filename.replace(' ', '_');
19696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.oldFileName =  filename + ".xml";
19796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.writeXML = false;
19896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.compareAPIs = true;
19996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
20096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
20196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
20296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-oldapidir")) {
20396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
20496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No directory specified after -oldapidir option.");
20596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
20696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                	JDiff.oldDirectory = options[i][1];
20796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
20896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
20996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
21096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-newapi")) {
21196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
21296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No version identifier specified after -newapi option.");
21396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else if (JDiff.writeXML) {
21496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("Use the -apiname or -newapi option, but not both.");
21596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
21696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String filename = options[i][1];
21796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    filename = filename.replace(' ', '_');
21896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.newFileName =  filename + ".xml";
21996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.writeXML = false;
22096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    JDiff.compareAPIs = true;
22196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
22296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
22396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
22496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-newapidir")) {
22596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
22696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No directory specified after -newapidir option.");
22796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
22896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                	JDiff.newDirectory = options[i][1];
22996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
23096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
23196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
23296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-usercommentsdir")) {
23396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
23496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("Android: No directory specified after -usercommentsdir option.");
23596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
23696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.commentsDir = options[i][1];
23796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
23896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
23996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
24096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-d")) {
24196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
24296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No directory specified after -d option.");
24396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
24496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.outputDir = options[i][1];
24596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
24696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
24796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
24896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-javadocnew")) {
24996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
25096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No location specified after -javadocnew option.");
25196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
25296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.newDocPrefix = options[i][1];
25396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
25496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
25596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
25696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-javadocold")) {
25796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
25896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No location specified after -javadocold option.");
25996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
26096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.oldDocPrefix = options[i][1];
26196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
26296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
26396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
26496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-baseuri")) {
26596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
26696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No base location specified after -baseURI option.");
26796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
26896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.baseURI = options[i][1];
26996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
27096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
27196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
27296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-excludeclass")) {
27396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
27496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No level (public|protected|package|private) specified after -excludeclass option.");
27596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
27696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String level = options[i][1];
27796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    if (level.compareTo("public") != 0 &&
27896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("protected") != 0 &&
27996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("package") != 0 &&
28096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("private") != 0) {
28196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        err.msg("Level specified after -excludeclass option must be one of (public|protected|package|private).");
28296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    } else {
28396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        RootDocToXML.classVisibilityLevel = level;
28496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    }
28596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
28696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
28796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
28896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-excludemember")) {
28996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
29096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No level (public|protected|package|private) specified after -excludemember option.");
29196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
29296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String level = options[i][1];
29396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    if (level.compareTo("public") != 0 &&
29496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("protected") != 0 &&
29596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("package") != 0 &&
29696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("private") != 0) {
29796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        err.msg("Level specified after -excludemember option must be one of (public|protected|package|private).");
29896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    } else {
29996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        RootDocToXML.memberVisibilityLevel = level;
30096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    }
30196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
30296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
30396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
30496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-firstsentence")) {
30596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                RootDocToXML.saveAllDocs = false;
30696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
30796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
30896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-docchanges")) {
30996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                HTMLReportGenerator.reportDocChanges = true;
31096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                Diff.noDocDiffs = false;
31196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
31296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
31396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-packagesonly")) {
31496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                RootDocToXML.packagesOnly = true;
31596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
31696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
31796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-showallchanges")) {
31896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                Diff.showAllChanges = true;
31996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
32096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
32196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-nosuggest")) {
32296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
32396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No level (all|remove|add|change) specified after -nosuggest option.");
32496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
32596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    String level = options[i][1];
32696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    if (level.compareTo("all") != 0 &&
32796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("remove") != 0 &&
32896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("add") != 0 &&
32996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        level.compareTo("change") != 0) {
33096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        err.msg("Level specified after -nosuggest option must be one of (all|remove|add|change).");
33196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    } else {
33296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        if (level.compareTo("removal") == 0)
33396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnRemovals = true;
33496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        else if (level.compareTo("add") == 0)
33596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnAdditions = true;
33696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        else if (level.compareTo("change") == 0)
33796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnChanges = true;
33896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        else if (level.compareTo("all") == 0) {
33996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnRemovals = true;
34096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnAdditions = true;
34196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                            HTMLReportGenerator.noCommentsOnChanges = true;
34296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                        }
34396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    }
34496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
34596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
34696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
34796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-checkcomments")) {
34896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                APIHandler.checkIsSentence = true;
34996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
35096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
35196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-retainnonprinting")) {
35296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                RootDocToXML.stripNonPrintables = false;
35396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
35496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
35596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-excludetag")) {
35696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
35796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No exclude tag specified after -excludetag option.");
35896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
35996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.excludeTag = options[i][1];
36096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.excludeTag = RootDocToXML.excludeTag.trim();
36196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    RootDocToXML.doExclude = true;
36296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
36396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
36496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
36596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-stats")) {
36696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                HTMLReportGenerator.doStats = true;
36796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
36896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
36996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-doctitle")) {
37096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
37196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No HTML text specified after -doctitle option.");
37296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
37396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.docTitle = options[i][1];
37496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
37596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
37696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
37796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-windowtitle")) {
37896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                if (options[i].length < 2) {
37996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    err.msg("No text specified after -windowtitle option.");
38096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                } else {
38196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                    HTMLReportGenerator.windowTitle = options[i][1];
38296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                }
38396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                continue;
38496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
38596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-version")) {
38696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                System.out.println("JDiff version: " + JDiff.version);
38796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                System.exit(0);
38896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
38996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            if (options[i][0].toLowerCase().equals("-help")) {
39096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                usage();
39196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project                System.exit(0);
39296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            }
39396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }//for
39496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        if (!JDiff.writeXML && !JDiff.compareAPIs) {
39596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            err.msg("First use the -apiname option to generate an XML file for one API.");
39696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            err.msg("Then use the -apiname option again to generate another XML file for a different version of the API.");
39796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project            err.msg("Finally use the -oldapi option and -newapi option to generate a report about how the APIs differ.");
39896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        }
39996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        return err.noErrorsFound;
40096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }// validOptions()
40196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
40296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Display the arguments for JDiff. */
40396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public static void usage() {
40496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("JDiff version: " + JDiff.version);
40596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("");
40696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("Valid JDiff arguments:");
40796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("");
40896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -apiname <Name of a version>");
40996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -oldapi <Name of a version>");
41096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -newapi <Name of a version>");
41196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
41296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  Optional Arguments");
41396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println();
41496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -d <directory> Destination directory for output HTML files");
41596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -oldapidir <directory> Location of the XML file for the old API");
41696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -newapidir <directory> Location of the XML file for the new API");
41796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -sourcepath <location of Java source files>");
41896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -javadocnew <location of existing Javadoc files for the new API>");
41996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -javadocold <location of existing Javadoc files for the old API>");
42096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -usercommentsdir <directory> Path to dir containing the user_comments* file(s)");
42196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
42296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -baseURI <base> Use \"base\" as the base location of the various DTDs and Schemas used by JDiff");
42396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -excludeclass [public|protected|package|private] Exclude classes which are not public, protected etc");
42496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -excludemember [public|protected|package|private] Exclude members which are not public, protected etc");
42596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
42696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -firstsentence Save only the first sentence of each comment block with the API.");
42796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -docchanges Report changes in Javadoc comments between the APIs");
42896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -nosuggest [all|remove|add|change] Do not add suggested comments to all, or the removed, added or chabged sections");
42996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -checkcomments Check that comments are sentences");
43096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -stripnonprinting Remove non-printable characters from comments.");
43196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -excludetag <tag> Define the Javadoc tag which implies exclusion");
43296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -stats Generate statistical output");
43396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("  -help       (generates this output)");
43496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("");
43596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project        System.err.println("For more help, see jdiff.html");
43696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    }
43796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
43896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** All the options passed on the command line. Logged to XML. */
43996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    public static String cmdOptions = "";
44096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project
44196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    /** Set to enable increased logging verbosity for debugging. */
44296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project    private static boolean trace = false;
44396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project}
444