Program: 109563
Project: 109563
Buggy source:
@Override public DecompilationResult decompileDirectory(File classesDir,File outputDir) throws DecompilationException {
  if (classesDir == null)   throw new IllegalArgumentException("String_Node_Str");
  if (!classesDir.exists())   throw new IllegalArgumentException("String_Node_Str" + classesDir.getPath());
  if (!classesDir.isDirectory())   throw new IllegalArgumentException("String_Node_Str" + classesDir.getPath());
  if (outputDir == null)   throw new IllegalArgumentException("String_Node_Str");
  if (outputDir.exists() && !outputDir.isDirectory())   throw new IllegalArgumentException("String_Node_Str" + outputDir.getAbsolutePath());
  log.info("String_Node_Str" + classesDir.getAbsolutePath() + "String_Node_Str"+ outputDir.getAbsolutePath());
  DecompilerSettings settings=getDefaultSettings(outputDir);
  MetadataSystem metadataSystem=new NoRetryMetadataSystem(settings.getTypeLoader());
  DecompilationResult result=new DecompilationResult();
  final List<File> files=Arrays.asList(classesDir.listFiles());
  for (  File file : files) {
    if (file.isDirectory()) {
      DecompilationResult intermediateResult=decompileDirectory(file,new File(outputDir,file.getName()));
      for (      String decompiled : intermediateResult.getDecompiled()) {
        result.addDecompiled(decompiled);
      }
      for (      DecompilationFailure failure : intermediateResult.getFailures()) {
        result.addFailure(failure);
      }
      continue;
    }
    String name=file.getName();
    if (!name.endsWith("String_Node_Str"))     continue;
    final String typeName=StringUtils.removeEnd(name,"String_Node_Str");
    try {
      this.decompileType(metadataSystem,typeName);
      result.addDecompiled(name);
    }
 catch (    Throwable e) {
      DecompilationFailure failure=new DecompilationFailure("String_Node_Str" + classesDir.getPath() + "String_Node_Str"+ name+ "String_Node_Str"+ e.getMessage(),name,e);
      log.error(failure.getMessage(),failure);
      result.addFailure(failure);
    }
  }
  return result;
}

Fixed version (ground truth):
public void decompileDirectory(File classesDir,File outputDir,DecompilationResult result) throws DecompilationException {
  if (classesDir == null)   throw new IllegalArgumentException("String_Node_Str");
  if (!classesDir.exists())   throw new IllegalArgumentException("String_Node_Str" + classesDir.getPath());
  if (!classesDir.isDirectory())   throw new IllegalArgumentException("String_Node_Str" + classesDir.getPath());
  if (outputDir == null)   throw new IllegalArgumentException("String_Node_Str");
  if (outputDir.exists() && !outputDir.isDirectory())   throw new IllegalArgumentException("String_Node_Str" + outputDir.getAbsolutePath());
  log.info("String_Node_Str" + classesDir.getAbsolutePath() + "String_Node_Str"+ outputDir.getAbsolutePath());
  DecompilerSettings settings=getDefaultSettings(outputDir);
  MetadataSystem metadataSystem=new NoRetryMetadataSystem(settings.getTypeLoader());
  final List<File> files=Arrays.asList(classesDir.listFiles());
  for (  File file : files) {
    if (file.isDirectory()) {
      decompileDirectory(file,new File(outputDir,file.getName()),result);
      continue;
    }
    String name=file.getName();
    if (!name.endsWith("String_Node_Str"))     continue;
    final String typeName=StringUtils.removeEnd(name,"String_Node_Str");
    try {
      File outputFile=this.decompileType(metadataSystem,typeName);
      result.addDecompiled(file.getAbsolutePath(),outputFile.getAbsolutePath());
    }
 catch (    Throwable e) {
      DecompilationFailure failure=new DecompilationFailure("String_Node_Str" + classesDir.getPath() + "String_Node_Str"+ name+ "String_Node_Str"+ e.getMessage(),name,e);
      log.error(failure.getMessage(),failure);
      result.addFailure(failure);
    }
  }
}