Program: 9208
Project: 9208
Buggy source:
public ICompilerRequestor getBatchRequestor(){
  return new ICompilerRequestor(){
    public void acceptResult(    CompilationResult unitResult){
      if (!((unitResult.hasErrors() && !continueWhenErrors) && !proceedOnError())) {
        Collection classFiles=unitResult.compiledTypes.values();
        boolean shouldAddAspectName=(buildConfig.getOutxmlName() != null);
        for (Iterator iter=classFiles.iterator(); iter.hasNext(); ) {
          ClassFile classFile=(ClassFile)iter.next();
          String filename=new String(classFile.fileName());
          String classname=filename.replace('/','.');
          filename=filename.replace('/',File.separatorChar) + "String_Node_Str";
          try {
            if (buildConfig.getOutputJar() == null) {
              writeDirectoryEntry(unitResult,classFile,filename);
            }
 else {
              writeZipEntry(classFile,filename);
            }
            if (shouldAddAspectName)             addAspectName(classname,unitResult.getFileName());
          }
 catch (          IOException ex) {
            IMessage message=EclipseAdapterUtils.makeErrorMessage(new String(unitResult.fileName),CANT_WRITE_RESULT,ex);
            handler.handleMessage(message);
          }
        }
        unitResult.compiledTypes.clear();
      }
      if (unitResult.hasProblems() || unitResult.hasTasks()) {
        IProblem[] problems=unitResult.getAllProblems();
        for (int i=0; i < problems.length; i++) {
          IMessage message=EclipseAdapterUtils.makeMessage(unitResult.compilationUnit,problems[i],getBcelWorld());
          handler.handleMessage(message);
        }
      }
    }
    private void writeDirectoryEntry(    CompilationResult unitResult,    ClassFile classFile,    String filename) throws IOException {
      File destinationPath=buildConfig.getOutputDir();
      if (buildConfig.getCompilationResultDestinationManager() != null) {
        destinationPath=buildConfig.getCompilationResultDestinationManager().getOutputLocationForClass(new File(new String(unitResult.fileName)));
      }
      String outFile;
      if (destinationPath == null) {
        outFile=new File(filename).getName();
        outFile=new File(extractDestinationPathFromSourceFile(unitResult),outFile).getPath();
      }
 else {
        outFile=new File(destinationPath,filename).getPath();
      }
      BufferedOutputStream os=FileUtil.makeOutputStream(new File(outFile));
      os.write(classFile.getBytes());
      os.close();
    }
    private void writeZipEntry(    ClassFile classFile,    String name) throws IOException {
      name=name.replace(File.separatorChar,'/');
      ZipEntry newEntry=new ZipEntry(name);
      zos.putNextEntry(newEntry);
      zos.write(classFile.getBytes());
      zos.closeEntry();
    }
    private void addAspectName(    String name,    char[] fileContainingAspect){
      BcelWorld world=getBcelWorld();
      ResolvedType type=world.resolve(name);
      if (type.isAspect()) {
        if (state.getAspectNamesToFileNameMap() == null) {
          state.initializeAspectNamesToFileNameMap();
        }
        if (!state.getAspectNamesToFileNameMap().containsKey(name)) {
          state.getAspectNamesToFileNameMap().put(name,fileContainingAspect);
        }
      }
    }
  }
;
}

Fixed version (ground truth):
public ICompilerRequestor getBatchRequestor(){
  return new ICompilerRequestor(){
    public void acceptResult(    CompilationResult unitResult){
      if (!unitResult.hasErrors() || proceedOnError()) {
        Collection classFiles=unitResult.compiledTypes.values();
        boolean shouldAddAspectName=(buildConfig.getOutxmlName() != null);
        for (Iterator iter=classFiles.iterator(); iter.hasNext(); ) {
          ClassFile classFile=(ClassFile)iter.next();
          String filename=new String(classFile.fileName());
          String classname=filename.replace('/','.');
          filename=filename.replace('/',File.separatorChar) + "String_Node_Str";
          try {
            if (buildConfig.getOutputJar() == null) {
              writeDirectoryEntry(unitResult,classFile,filename);
            }
 else {
              writeZipEntry(classFile,filename);
            }
            if (shouldAddAspectName)             addAspectName(classname,unitResult.getFileName());
          }
 catch (          IOException ex) {
            IMessage message=EclipseAdapterUtils.makeErrorMessage(new String(unitResult.fileName),CANT_WRITE_RESULT,ex);
            handler.handleMessage(message);
          }
        }
        unitResult.compiledTypes.clear();
      }
      if (unitResult.hasProblems() || unitResult.hasTasks()) {
        IProblem[] problems=unitResult.getAllProblems();
        for (int i=0; i < problems.length; i++) {
          IMessage message=EclipseAdapterUtils.makeMessage(unitResult.compilationUnit,problems[i],getBcelWorld());
          handler.handleMessage(message);
        }
      }
    }
    private void writeDirectoryEntry(    CompilationResult unitResult,    ClassFile classFile,    String filename) throws IOException {
      File destinationPath=buildConfig.getOutputDir();
      if (buildConfig.getCompilationResultDestinationManager() != null) {
        destinationPath=buildConfig.getCompilationResultDestinationManager().getOutputLocationForClass(new File(new String(unitResult.fileName)));
      }
      String outFile;
      if (destinationPath == null) {
        outFile=new File(filename).getName();
        outFile=new File(extractDestinationPathFromSourceFile(unitResult),outFile).getPath();
      }
 else {
        outFile=new File(destinationPath,filename).getPath();
      }
      BufferedOutputStream os=FileUtil.makeOutputStream(new File(outFile));
      os.write(classFile.getBytes());
      os.close();
    }
    private void writeZipEntry(    ClassFile classFile,    String name) throws IOException {
      name=name.replace(File.separatorChar,'/');
      ZipEntry newEntry=new ZipEntry(name);
      zos.putNextEntry(newEntry);
      zos.write(classFile.getBytes());
      zos.closeEntry();
    }
    private void addAspectName(    String name,    char[] fileContainingAspect){
      BcelWorld world=getBcelWorld();
      ResolvedType type=world.resolve(name);
      if (type.isAspect()) {
        if (state.getAspectNamesToFileNameMap() == null) {
          state.initializeAspectNamesToFileNameMap();
        }
        if (!state.getAspectNamesToFileNameMap().containsKey(name)) {
          state.getAspectNamesToFileNameMap().put(name,fileContainingAspect);
        }
      }
    }
  }
;
}