package soot.JastAddJ; import java.util.HashSet;import java.util.LinkedHashSet;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;import java.io.FileNotFoundException;import java.util.Collection;import soot.*;import soot.util.*;import soot.jimple.*;import soot.coffi.ClassFile;import soot.coffi.method_info;import soot.coffi.CONSTANT_Utf8_info;import soot.tagkit.SourceFileTag;import soot.coffi.CoffiMethodSource; public class Options extends java.lang.Object { // Declared in Options.jadd at line 20 static class Option { public String name; public boolean hasValue; public boolean isCollection; public Option(String name, boolean hasValue, boolean isCollection) { this.name = name; this.hasValue = hasValue; this.isCollection = isCollection; } } // Declared in Options.jadd at line 30 private Map options = new HashMap(); // Declared in Options.jadd at line 31 private Map optionDescriptions = new HashMap(); // Declared in Options.jadd at line 33 private HashSet files = new HashSet(); // Declared in Options.jadd at line 34 public Collection files() { return files; } // Declared in Options.jadd at line 38 public void initOptions() { options = new HashMap(); optionDescriptions = new HashMap(); files = new HashSet(); } // Declared in Options.jadd at line 44 public void addKeyOption(String name) { if(optionDescriptions.containsKey(name)) throw new Error("Command line definition error: option description for " + name + " is multiply declared"); optionDescriptions.put(name, new Option(name, false, false)); } // Declared in Options.jadd at line 50 public void addKeyValueOption(String name) { if(optionDescriptions.containsKey(name)) throw new Error("Command line definition error: option description for " + name + " is multiply declared"); optionDescriptions.put(name, new Option(name, true, false)); } // Declared in Options.jadd at line 56 public void addKeyCollectionOption(String name) { if(optionDescriptions.containsKey(name)) throw new Error("Command line definition error: option description for " + name + " is multiply declared"); optionDescriptions.put(name, new Option(name, true, true)); } // Declared in Options.jadd at line 62 public void addOptionDescription(String name, boolean value) { if(optionDescriptions.containsKey(name)) throw new Error("Command line definition error: option description for " + name + " is multiply declared"); optionDescriptions.put(name, new Option(name, value, false)); } // Declared in Options.jadd at line 67 public void addOptionDescription(String name, boolean value, boolean isCollection) { if(optionDescriptions.containsKey(name)) throw new Error("Command line definition error: option description for " + name + " is multiply declared"); optionDescriptions.put(name, new Option(name, value, isCollection)); } // Declared in Options.jadd at line 73 public void addOptions(String[] args) { for(int i = 0; i < args.length; i++) { String arg = args[i]; if(arg.startsWith("@")) { try { String fileName = arg.substring(1,arg.length()); java.io.StreamTokenizer tokenizer = new java.io.StreamTokenizer(new java.io.FileReader(fileName)); tokenizer.resetSyntax(); tokenizer.whitespaceChars(' ',' '); tokenizer.whitespaceChars('\t','\t'); tokenizer.whitespaceChars('\f','\f'); tokenizer.whitespaceChars('\n','\n'); tokenizer.whitespaceChars('\r','\r'); tokenizer.wordChars(33,255); ArrayList list = new ArrayList(); int next = tokenizer.nextToken(); while(next != java.io.StreamTokenizer.TT_EOF) { if(next == java.io.StreamTokenizer.TT_WORD) { list.add(tokenizer.sval); } next = tokenizer.nextToken(); } String[] newArgs = new String[list.size()]; int index = 0; for(Iterator iter = list.iterator(); iter.hasNext(); index++) { newArgs[index] = (String)iter.next(); } addOptions(newArgs); } catch (java.io.IOException e) { } } else if(arg.startsWith("-")) { if(!optionDescriptions.containsKey(arg)) throw new Error("Command line argument error: option " + arg + " is not defined"); Option o = (Option)optionDescriptions.get(arg); if(!o.isCollection && options.containsKey(arg)) throw new Error("Command line argument error: option " + arg + " is multiply defined"); if(o.hasValue && !o.isCollection) { String value = null; if(i + 1 > args.length - 1) throw new Error("Command line argument error: value missing for key " + arg); value = args[i+1]; if(value.startsWith("-")) throw new Error("Command line argument error: value missing for key " + arg); i++; options.put(arg, value); } else if(o.hasValue && o.isCollection) { String value = null; if(i + 1 > args.length - 1) throw new Error("Command line argument error: value missing for key " + arg); value = args[i+1]; if(value.startsWith("-")) throw new Error("Command line argument error: value missing for key " + arg); i++; Collection c = (Collection)options.get(arg); if(c == null) c = new ArrayList(); c.add(value); options.put(arg, c); } else { options.put(arg, null); } } else { files.add(arg); } } } // Declared in Options.jadd at line 145 public boolean hasOption(String name) { return options.containsKey(name); } // Declared in Options.jadd at line 148 public void setOption(String name) { options.put(name, null); } // Declared in Options.jadd at line 151 public boolean hasValueForOption(String name) { return options.containsKey(name) && options.get(name) != null; } // Declared in Options.jadd at line 154 public String getValueForOption(String name) { if(!hasValueForOption(name)) throw new Error("Command line argument error: key " + name + " does not have a value"); return (String)options.get(name); } // Declared in Options.jadd at line 159 public void setValueForOption(String value, String option) { options.put(option, value); } // Declared in Options.jadd at line 162 public Collection getValueCollectionForOption(String name) { if(!hasValueForOption(name)) throw new Error("Command line argument error: key " + name + " does not have a value"); return (Collection)options.get(name); } // Declared in Options.jadd at line 168 public boolean verbose() { return hasOption("-verbose"); } }