Program: 9404
Project: 9404
Buggy source:
/** 
 * Add new options from the ProjectPropertiesAdapter to the configuration. <ul> <li>New list entries are added if not duplicates in, for classpath, aspectpath, injars, inpath and sourceroots</li> <li>New bootclasspath entries are ignored XXX</li> <li>Set only one new entry for output dir or output jar only if there is no output dir/jar entry in the config</li> </ul> Subsequent changes to the ProjectPropertiesAdapter will not affect the configuration. <p>Added by AMC 01.20.2003, bugzilla #29769
 */
private void configureProjectOptions(AjBuildConfig config,ProjectPropertiesAdapter properties){
  String propcp=properties.getClasspath();
  if (!LangUtil.isEmpty(propcp)) {
    StringTokenizer st=new StringTokenizer(propcp,File.pathSeparator);
    List configClasspath=config.getClasspath();
    ArrayList toAdd=new ArrayList();
    while (st.hasMoreTokens()) {
      String entry=st.nextToken();
      if (!configClasspath.contains(entry)) {
        toAdd.add(entry);
      }
    }
    if (0 < toAdd.size()) {
      ArrayList both=new ArrayList(configClasspath.size() + toAdd.size());
      both.addAll(configClasspath);
      both.addAll(toAdd);
      config.setClasspath(both);
      Ajde.getDefault().logEvent("String_Node_Str" + both);
    }
  }
  if ((null == config.getOutputDir() && (null == config.getOutputJar()))) {
    String outPath=properties.getOutputPath();
    if (!LangUtil.isEmpty(outPath)) {
      config.setOutputDir(new File(outPath));
    }
    String outJar=properties.getOutJar();
    if (!LangUtil.isEmpty(outJar)) {
      config.setOutputJar(new File(outJar));
    }
  }
  join(config.getSourceRoots(),properties.getSourceRoots());
  join(config.getInJars(),properties.getInJars());
  join(config.getInpath(),properties.getInpath());
  config.setSourcePathResources(properties.getSourcePathResources());
  join(config.getAspectpath(),properties.getAspectPath());
}

Fixed version (ground truth):
/** 
 * Add new options from the ProjectPropertiesAdapter to the configuration. <ul> <li>New list entries are added if not duplicates in, for classpath, aspectpath, injars, inpath and sourceroots</li> <li>Set only one new entry for output dir or output jar only if there is no output dir/jar entry in the config</li> </ul> Subsequent changes to the ProjectPropertiesAdapter will not affect the configuration. <p>Added by AMC 01.20.2003, bugzilla #29769
 */
private void configureProjectOptions(AjBuildConfig config,ProjectPropertiesAdapter properties){
  String propcp=properties.getClasspath();
  if (!LangUtil.isEmpty(propcp)) {
    StringTokenizer st=new StringTokenizer(propcp,File.pathSeparator);
    List configClasspath=config.getClasspath();
    ArrayList toAdd=new ArrayList();
    while (st.hasMoreTokens()) {
      String entry=st.nextToken();
      if (!configClasspath.contains(entry)) {
        toAdd.add(entry);
      }
    }
    if (0 < toAdd.size()) {
      ArrayList both=new ArrayList(configClasspath.size() + toAdd.size());
      both.addAll(configClasspath);
      both.addAll(toAdd);
      config.setClasspath(both);
      Ajde.getDefault().logEvent("String_Node_Str" + both);
    }
  }
  propcp=properties.getBootClasspath();
  if (!LangUtil.isEmpty(propcp)) {
    StringTokenizer st=new StringTokenizer(propcp,File.pathSeparator);
    List configClasspath=config.getBootclasspath();
    ArrayList toAdd=new ArrayList();
    while (st.hasMoreTokens()) {
      String entry=st.nextToken();
      if (!configClasspath.contains(entry)) {
        toAdd.add(entry);
      }
    }
    if (0 < toAdd.size()) {
      ArrayList both=new ArrayList(configClasspath.size() + toAdd.size());
      both.addAll(configClasspath);
      both.addAll(toAdd);
      config.setBootclasspath(both);
      Ajde.getDefault().logEvent("String_Node_Str" + both);
    }
  }
  if ((null == config.getOutputDir() && (null == config.getOutputJar()))) {
    String outPath=properties.getOutputPath();
    if (!LangUtil.isEmpty(outPath)) {
      config.setOutputDir(new File(outPath));
    }
    String outJar=properties.getOutJar();
    if (!LangUtil.isEmpty(outJar)) {
      config.setOutputJar(new File(outJar));
    }
  }
  join(config.getSourceRoots(),properties.getSourceRoots());
  join(config.getInJars(),properties.getInJars());
  join(config.getInpath(),properties.getInpath());
  config.setSourcePathResources(properties.getSourcePathResources());
  join(config.getAspectpath(),properties.getAspectPath());
}