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 }