Program: 101264
Project: 101264
Buggy source:
public void run() throws IOException {
  FileUtils.mkdir(outputDir.getAbsolutePath());
  @SuppressWarnings("String_Node_Str") final List<File> tests=FileUtils.getFiles(baseDir,includes,excludes);
  if (tests.isEmpty()) {
    logger.warn("String_Node_Str");
    return;
  }
  logger.info("String_Node_Str",threadCount);
  logger.info("String_Node_Str",outputStrategy);
  final ExecutorService executorService=Executors.newFixedThreadPool(threadCount);
  final CompletionService<RunStats> completionService=new ExecutorCompletionService<RunStats>(executorService);
  for (  final File test : tests) {
    completionService.submit(new Callable<RunStats>(){
      @Override public RunStats call(){
        logger.info("String_Node_Str",test.getAbsoluteFile().toURI().normalize().getPath());
        try {
          final RunStats runStats=runTest(test);
          if (outputStrategy.contains(OutputStrategy.PER_TEST)) {
            writeRunStats(runStats);
          }
          return runStats;
        }
 catch (        final IOException e) {
          logger.error(e.getMessage(),e);
          return null;
        }
      }
    }
);
  }
  final List<RunStats> allRunStats=Lists.newLinkedList();
  try {
    for (int i=0; i < tests.size(); i++) {
      final Future<RunStats> future=completionService.take();
      final RunStats runStats=future.get();
      allRunStats.add(runStats);
    }
  }
 catch (  final Exception e) {
    logger.debug(e.getMessage(),e);
  }
 finally {
    executorService.shutdown();
  }
  logger.info("String_Node_Str");
  if (outputStrategy.contains(OutputStrategy.TOTAL)) {
    final RunStats totalStats=new RunStats(new File(outputDir,reportName),"String_Node_Str");
    for (    final RunStats runStats : allRunStats) {
      for (      final FileStats fileStats : runStats) {
        totalStats.add(fileStats);
      }
    }
    writeRunStats(totalStats);
  }
}

Fixed version (ground truth):
public void run() throws IOException {
  FileUtils.mkdir(outputDir.getAbsolutePath());
  @SuppressWarnings("String_Node_Str") final List<File> tests=FileUtils.getFiles(baseDir,includes,excludes);
  if (tests.isEmpty()) {
    logger.warn("String_Node_Str");
    return;
  }
  logger.info("String_Node_Str",threadCount);
  logger.info("String_Node_Str",outputStrategy);
  final ExecutorService executorService=Executors.newFixedThreadPool(threadCount);
  final CompletionService<RunStats> completionService=new ExecutorCompletionService<RunStats>(executorService);
  for (  final File test : tests) {
    completionService.submit(new Callable<RunStats>(){
      @Override public RunStats call(){
        logger.info("String_Node_Str",test.getAbsoluteFile().toURI().normalize().getPath());
        try {
          final RunStats runStats=runTest(test);
          if (outputStrategy.contains(OutputStrategy.PER_TEST)) {
            writeRunStats(runStats);
          }
          return runStats;
        }
 catch (        final IOException e) {
          return RunStats.EMPTY;
        }
      }
    }
);
  }
  final List<RunStats> allRunStats=Lists.newLinkedList();
  try {
    for (    final File test : tests) {
      try {
        final Future<RunStats> future=completionService.take();
        final RunStats runStats=future.get();
        allRunStats.add(runStats);
      }
 catch (      final Exception e) {
        logger.warn("String_Node_Str",test.getAbsolutePath(),e.getMessage());
        logger.debug(e.getMessage(),e);
      }
    }
  }
  finally {
    executorService.shutdown();
  }
  logger.info("String_Node_Str");
  if (outputStrategy.contains(OutputStrategy.TOTAL)) {
    final RunStats totalStats=new RunStats(new File(outputDir,reportName),"String_Node_Str");
    for (    final RunStats runStats : allRunStats) {
      if (runStats != RunStats.EMPTY) {
        for (        final FileStats fileStats : runStats) {
          totalStats.add(fileStats);
        }
      }
    }
    writeRunStats(totalStats);
  }
}