001 package javafe;
002
003 import javafe.util.UsageError;
004
005 /**
006 * This class holds the command-line options specific to the SrcTool class.
007 */
008
009 public class SrcToolOptions extends Options
010 {
011 /**
012 * Do we allow the <code>-avoidSpec</code> option? Defaults to
013 * yes.
014 */
015 public static boolean allowAvoidSpec = true;
016
017 /**
018 * Do we allow the -depend option? Defaults to yes.
019 */
020 public static boolean allowDepend = true;
021
022 /**
023 * Should we avoid specs for all types loaded after the initial
024 * set of source files?
025 *
026 * <p> Defaults to false. Set by using the <tt>-avoidSpec</tt>
027 * option.
028 *
029 * <p> Note: if <code>processRecursively</code> is set, then we
030 * always avoid specs.
031 */
032 public boolean avoidSpec = false;
033
034 /**
035 * Should we process files recursively? Defaults to no, can be set
036 * by a sub-class, or the <tt>-depend</tt> option.
037 *
038 * <p> Warning: this needs to be set before option processing is
039 * finished!
040 */
041 public boolean processRecursively = false;
042
043 /**
044 * The list of filenames on the command line; this {@link java.util.Vector} is
045 * aliased with a variable in {@link SrcTool}.
046 */
047
048 // @overrides Options.processOption(String, String[], int)
049
050 public int processOption(String option, String[] args, int offset)
051 throws UsageError {
052 if (option.equals("-depend") && allowDepend) {
053 processRecursively = true;
054 return offset;
055 } else if (option.equals("-avoidSpec") && allowAvoidSpec) {
056 avoidSpec = true;
057 return offset;
058 } else
059 // Pass on unrecognized options:
060 return super.processOption(option, args, offset);
061 }
062
063 /**
064 * Print non-option usage info to <code>System.err</code>. Output
065 * must include at least one newline.
066 */
067 public String showNonOptions() {
068 return ("<source files>");
069 }
070
071 /**
072 * Print option information to <code>System.err</code>. Each
073 * printed line should be preceeded by two blank spaces.
074 *
075 * <p> Each overriding method should first call
076 * <code>super.showOptions()</code>.
077 */
078 public String showOptions(boolean all) {
079 String[][] data1 = {{"-AvoidSpec",
080 "Avoid specification files if possible and read type and spec information\n" +
081 "\tfrom source and class files instead"}};
082 String[][] data2 = {{"-Depend",
083 "Recursively process all specification, source, and binary files on which\n" +
084 "\tthe input files depend"}};
085
086 StringBuffer sb = new StringBuffer(super.showOptions(all));
087
088 if (allowAvoidSpec) sb.append(showOptionArray(data1));
089
090 if (allowDepend) sb.append(showOptionArray(data2));
091
092 return sb.toString();
093 }
094
095 }