Program: 109425
Project: 109425
Buggy source:
/** 
 * Process the given batch of files and pass the results back to the listener as each file is processed.
 */
public static BatchASTFuture analyze(final BatchASTListener listener,final WildcardImportResolver importResolver,final Set<String> libraryPaths,final Set<String> sourcePaths,Set<Path> sourceFiles){
  final ExecutorService executor=Executors.newFixedThreadPool(THREADPOOL_SIZE);
  final String[] encodings=null;
  final String[] bindingKeys=new String[0];
  final FileASTRequestor requestor=new FileASTRequestor(){
    @Override public void acceptAST(    String sourcePath,    CompilationUnit ast){
      try {
        super.acceptAST(sourcePath,ast);
        ReferenceResolvingVisitor visitor=new ReferenceResolvingVisitor(importResolver,ast,sourcePath);
        ast.accept(visitor);
        listener.processed(Paths.get(sourcePath),visitor.getJavaClassReferences());
      }
 catch (      Throwable t) {
        listener.failed(Paths.get(sourcePath),t);
      }
    }
  }
;
  List<List<String>> batches=createBatches(sourceFiles);
  for (  final List<String> batch : batches) {
    executor.submit(new Callable<Void>(){
      @Override public Void call() throws Exception {
        ASTParser parser=ASTParser.newParser(AST.JLS8);
        parser.setBindingsRecovery(false);
        parser.setResolveBindings(true);
        Map<Object,Object> options=JavaCore.getOptions();
        JavaCore.setComplianceOptions(JavaCore.VERSION_1_8,options);
        options.put(JavaCore.CORE_INCOMPLETE_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE,"String_Node_Str");
        options.put(JavaCore.CORE_CIRCULAR_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION,"String_Node_Str");
        options.put(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_NULL_ANNOTATION_INFERENCE_CONFLICT,"String_Node_Str");
        options.put(JavaCore.CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE,"String_Node_Str");
        parser.setCompilerOptions(options);
        parser.setCompilerOptions(options);
        parser.setEnvironment(libraryPaths.toArray(new String[libraryPaths.size()]),sourcePaths.toArray(new String[sourcePaths.size()]),null,true);
        parser.createASTs(batch.toArray(new String[batch.size()]),encodings,bindingKeys,requestor,null);
        return null;
      }
    }
);
  }
  executor.shutdown();
  return new BatchASTFuture(){
    @Override public boolean isDone(){
      return executor.isTerminated();
    }
  }
;
}

Fixed version (ground truth):
/** 
 * Process the given batch of files and pass the results back to the listener as each file is processed.
 */
public static BatchASTFuture analyze(final BatchASTListener listener,final WildcardImportResolver importResolver,final Set<String> libraryPaths,final Set<String> sourcePaths,Set<Path> sourceFiles){
  final ExecutorService executor=Executors.newFixedThreadPool(THREADPOOL_SIZE);
  final String[] encodings=null;
  final String[] bindingKeys=new String[0];
  final FileASTRequestor requestor=new FileASTRequestor(){
    @Override public void acceptAST(    String sourcePath,    CompilationUnit ast){
      try {
        super.acceptAST(sourcePath,ast);
        ReferenceResolvingVisitor visitor=new ReferenceResolvingVisitor(importResolver,ast,sourcePath);
        ast.accept(visitor);
        listener.processed(Paths.get(sourcePath),visitor.getJavaClassReferences());
      }
 catch (      Throwable t) {
        listener.failed(Paths.get(sourcePath),t);
      }
    }
  }
;
  List<List<String>> batches=createBatches(sourceFiles);
  for (  final List<String> batch : batches) {
    executor.submit(new Callable<Void>(){
      @Override public Void call() throws Exception {
        ASTParser parser=ASTParser.newParser(AST.JLS8);
        parser.setBindingsRecovery(false);
        parser.setResolveBindings(true);
        Map<Object,Object> options=JavaCore.getOptions();
        JavaCore.setComplianceOptions(JavaCore.VERSION_1_8,options);
        options.put(JavaCore.CORE_INCOMPLETE_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE,"String_Node_Str");
        options.put(JavaCore.CORE_CIRCULAR_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_NULL_SPECIFICATION_VIOLATION,"String_Node_Str");
        options.put(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH,"String_Node_Str");
        options.put(JavaCore.COMPILER_PB_NULL_ANNOTATION_INFERENCE_CONFLICT,"String_Node_Str");
        options.put(JavaCore.CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE,"String_Node_Str");
        options.put(JavaCore.CORE_JAVA_BUILD_DUPLICATE_RESOURCE,"String_Node_Str");
        parser.setCompilerOptions(options);
        parser.setCompilerOptions(options);
        parser.setEnvironment(libraryPaths.toArray(new String[libraryPaths.size()]),sourcePaths.toArray(new String[sourcePaths.size()]),null,true);
        parser.createASTs(batch.toArray(new String[batch.size()]),encodings,bindingKeys,requestor,null);
        return null;
      }
    }
);
  }
  executor.shutdown();
  return new BatchASTFuture(){
    @Override public boolean isDone(){
      return executor.isTerminated();
    }
  }
;
}