⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.jadd

📁 JDK1.4编译器前端
💻 JADD
字号:
/* * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered * by the modified BSD License. You should have received a copy of the * modified BSD license with this compiler. *  * Copyright (c) 2005-2008, Torbjorn Ekman * All rights reserved. */import java.util.*;aspect Options {  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;    }  }  private static Map Program.options = new HashMap();  private static Map Program.optionDescriptions = new HashMap();  private HashSet Program.files = new HashSet();  public Collection Program.files() {    return files;  }  public static void Program.initOptions() {    options = new HashMap();    optionDescriptions = new HashMap();  }  public void Program.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));  }    public void Program.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));  }    public void Program.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));  }   public void Program.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));  }  public void Program.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));  }    public void Program.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);      }    }  }  public static boolean Program.hasOption(String name) {    return options.containsKey(name);  }  public static void Program.setOption(String name) {    options.put(name, null);  }  public static boolean Program.hasValueForOption(String name) {    return options.containsKey(name) && options.get(name) != null;  }  public static String Program.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);  }  public static void Program.setValueForOption(String value, String option) {    options.put(option, value);  }  public static Collection Program.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);  }  public static boolean Program.verbose() {    return hasOption("-verbose");  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -