Program: 54660
Project: 54660
Buggy source:
public boolean run(TreeLogger logger) throws UnableToCompleteException {
  PerfLogger.start("String_Node_Str");
  boolean tempWorkDir=false;
  try {
    if (options.getWorkDir() == null) {
      options.setWorkDir(Utility.makeTemporaryDirectory(null,"String_Node_Str"));
      tempWorkDir=true;
    }
    for (    String moduleName : options.getModuleNames()) {
      ModuleDef module=ModuleDefLoader.loadFromClassPath(logger,moduleName);
      File compilerWorkDir=options.getCompilerWorkDir(moduleName);
      if (options.isValidateOnly()) {
        if (!Precompile.validate(logger,options,module,options.getGenDir(),compilerWorkDir)) {
          return false;
        }
      }
 else {
        long compileStart=System.currentTimeMillis();
        logger=logger.branch(TreeLogger.INFO,"String_Node_Str" + moduleName);
        Precompilation precompilation=Precompile.precompile(logger,options,module,options.getGenDir(),compilerWorkDir);
        if (precompilation == null) {
          return false;
        }
        Permutation[] allPerms=precompilation.getPermutations();
        File[] resultFiles=CompilePerms.makeResultFiles(compilerWorkDir,allPerms);
        CompilePerms.compile(logger,precompilation,allPerms,options.getLocalWorkers(),resultFiles);
        Link.link(logger.branch(TreeLogger.INFO,"String_Node_Str" + options.getWarDir().getPath()),module,precompilation,resultFiles,options.getWarDir(),options.getExtraDir());
        long compileDone=System.currentTimeMillis();
        long delta=compileDone - compileStart;
        logger.log(TreeLogger.INFO,"String_Node_Str" + String.format("String_Node_Str",delta / 1000d) + "String_Node_Str");
      }
    }
  }
 catch (  IOException e) {
    logger.log(TreeLogger.ERROR,"String_Node_Str",e);
    return false;
  }
 finally {
    PerfLogger.end();
    if (tempWorkDir) {
      Util.recursiveDelete(options.getWorkDir(),false);
    }
  }
  return true;
}

Fixed version (ground truth):
public boolean run(TreeLogger logger) throws UnableToCompleteException {
  PerfLogger.start("String_Node_Str");
  boolean tempWorkDir=false;
  try {
    if (options.getWorkDir() == null) {
      options.setWorkDir(Utility.makeTemporaryDirectory(null,"String_Node_Str"));
      tempWorkDir=true;
    }
    for (    String moduleName : options.getModuleNames()) {
      ModuleDef module=ModuleDefLoader.loadFromClassPath(logger,moduleName,true);
      File compilerWorkDir=options.getCompilerWorkDir(moduleName);
      if (options.isValidateOnly()) {
        if (!Precompile.validate(logger,options,module,options.getGenDir(),compilerWorkDir)) {
          return false;
        }
      }
 else {
        long compileStart=System.currentTimeMillis();
        logger=logger.branch(TreeLogger.INFO,"String_Node_Str" + moduleName);
        Precompilation precompilation=Precompile.precompile(logger,options,module,options.getGenDir(),compilerWorkDir);
        if (precompilation == null) {
          return false;
        }
        Permutation[] allPerms=precompilation.getPermutations();
        File[] resultFiles=CompilePerms.makeResultFiles(compilerWorkDir,allPerms);
        CompilePerms.compile(logger,precompilation,allPerms,options.getLocalWorkers(),resultFiles);
        Link.link(logger.branch(TreeLogger.INFO,"String_Node_Str" + options.getWarDir().getPath()),module,precompilation,resultFiles,options.getWarDir(),options.getExtraDir());
        long compileDone=System.currentTimeMillis();
        long delta=compileDone - compileStart;
        logger.log(TreeLogger.INFO,"String_Node_Str" + String.format("String_Node_Str",delta / 1000d) + "String_Node_Str");
      }
    }
  }
 catch (  IOException e) {
    logger.log(TreeLogger.ERROR,"String_Node_Str",e);
    return false;
  }
 finally {
    PerfLogger.end();
    if (tempWorkDir) {
      Util.recursiveDelete(options.getWorkDir(),false);
    }
  }
  return true;
}