示例#1
0
  /**
   * Process command line arguments: store all command line options in `options' table and return
   * all source filenames.
   *
   * @param flags The array of command line arguments.
   */
  public List<File> processArgs(String[] flags) { // XXX sb protected
    int ac = 0;
    while (ac < flags.length) {
      String flag = flags[ac];
      ac++;

      int j;
      // quick hack to speed up file processing:
      // if the option does not begin with '-', there is no need to check
      // most of the compiler options.
      int firstOptionToCheck = flag.charAt(0) == '-' ? 0 : recognizedOptions.length - 1;
      for (j = firstOptionToCheck; j < recognizedOptions.length; j++)
        if (recognizedOptions[j].matches(flag)) break;

      if (j == recognizedOptions.length) {
        error("err.invalid.flag", flag);
        return null;
      }

      Option option = recognizedOptions[j];
      if (option.hasArg()) {
        if (ac == flags.length) {
          error("err.req.arg", flag);
          return null;
        }
        String operand = flags[ac];
        ac++;
        if (option.process(options, flag, operand)) return null;
      } else {
        if (option.process(options, flag)) return null;
      }
    }

    if (!checkDirectory("-d")) return null;
    if (!checkDirectory("-s")) return null;

    String sourceString = options.get("-source");
    Source source = (sourceString != null) ? Source.lookup(sourceString) : Source.DEFAULT;
    String targetString = options.get("-target");
    Target target = (targetString != null) ? Target.lookup(targetString) : Target.DEFAULT;
    // We don't check source/target consistency for CLDC, as J2ME
    // profiles are not aligned with J2SE targets; moreover, a
    // single CLDC target may have many profiles.  In addition,
    // this is needed for the continued functioning of the JSR14
    // prototype.
    if (Character.isDigit(target.name.charAt(0))) {
      if (target.compareTo(source.requiredTarget()) < 0) {
        if (targetString != null) {
          if (sourceString == null) {
            warning(
                "warn.target.default.source.conflict", targetString, source.requiredTarget().name);
          } else {
            warning("warn.source.target.conflict", sourceString, source.requiredTarget().name);
          }
          return null;
        } else {
          options.put("-target", source.requiredTarget().name);
        }
      } else {
        if (targetString == null && !source.allowGenerics()) {
          options.put("-target", Target.JDK1_4.name);
        }
      }
    }
    return filenames.toList();
  }
 static Option[] getOptions(OptionHelper helper, Set<OptionName> desired) {
   ListBuffer<Option> options = new ListBuffer<Option>();
   for (Option option : getAll(helper))
     if (desired.contains(option.getName())) options.append(option);
   return options.toArray(new Option[options.length()]);
 }
示例#3
0
 public Option getOption(String flag) {
   for (Option option : recognizedOptions) {
     if (option.matches(flag)) return option;
   }
   return null;
 }