Program: 54055
Project: 54055
Buggy source:
@Override public void process(CompilationUnitDeclaration unit,int index){
  long processBeginNanos=System.nanoTime();
{
    this.lookupEnvironment.unitBeingCompleted=unit;
    long parseStart=System.currentTimeMillis();
    this.parser.getMethodBodies(unit);
    long resolveStart=System.currentTimeMillis();
    this.stats.parseTime+=resolveStart - parseStart;
    if (unit.scope != null) {
      unit.scope.faultInTypes();
    }
    if (unit.scope != null) {
      unit.scope.verifyMethods(lookupEnvironment.methodVerifier());
    }
    unit.resolve();
    long analyzeStart=System.currentTimeMillis();
    this.stats.resolveTime+=analyzeStart - resolveStart;
    unit.analyseCode();
    long generateStart=System.currentTimeMillis();
    this.stats.analyzeTime+=generateStart - analyzeStart;
    if (doGenerateBytes) {
      unit.generateCode();
    }
    if (options.produceReferenceInfo && unit.scope != null) {
      unit.scope.storeDependencyInfo();
    }
    unit.finalizeProblems();
    this.stats.generateTime+=System.currentTimeMillis() - generateStart;
    unit.compilationResult.totalUnitsKnown=totalUnits;
    this.lookupEnvironment.unitBeingCompleted=null;
  }
  ICompilationUnit cu=unit.compilationResult.compilationUnit;
  String loc=String.valueOf(cu.getFileName());
  TreeLogger branch=logger.branch(TreeLogger.SPAM,"String_Node_Str" + loc,null);
  String[] typeNames=outer.doFindAdditionalTypesUsingJsni(branch,unit);
  addAdditionalTypes(branch,typeNames);
  typeNames=outer.doFindAdditionalTypesUsingRebinds(branch,unit);
  addAdditionalTypes(branch,typeNames);
  typeNames=outer.doFindAdditionalTypesUsingArtificialRescues(branch,unit);
  addAdditionalTypes(branch,typeNames);
  if (cuds != null) {
    cuds.add(unit);
  }
  jdtProcessNanos+=System.nanoTime() - processBeginNanos;
}

Fixed version (ground truth):
@Override public void process(CompilationUnitDeclaration unit,int index){
  long processBeginNanos=System.nanoTime();
{
    this.lookupEnvironment.unitBeingCompleted=unit;
    long parseStart=System.currentTimeMillis();
    this.parser.getMethodBodies(unit);
    long resolveStart=System.currentTimeMillis();
    this.stats.parseTime+=resolveStart - parseStart;
    if (unit.scope != null) {
      unit.scope.faultInTypes();
    }
    if (unit.scope != null) {
      unit.scope.verifyMethods(lookupEnvironment.methodVerifier());
    }
    unit.resolve();
    long analyzeStart=System.currentTimeMillis();
    this.stats.resolveTime+=analyzeStart - resolveStart;
    unit.analyseCode();
    long generateStart=System.currentTimeMillis();
    this.stats.analyzeTime+=generateStart - analyzeStart;
    if (doGenerateBytes) {
      unit.generateCode();
    }
    if (options.produceReferenceInfo && unit.scope != null) {
      unit.scope.storeDependencyInfo();
    }
    unit.finalizeProblems();
    this.stats.generateTime+=System.currentTimeMillis() - generateStart;
    unit.compilationResult.totalUnitsKnown=totalUnits;
    this.lookupEnvironment.unitBeingCompleted=null;
  }
  ICompilationUnit cu=unit.compilationResult.compilationUnit;
  String loc=String.valueOf(cu.getFileName());
  TreeLogger branch=logger.branch(TreeLogger.SPAM,"String_Node_Str" + loc,null);
  String[] typeNames=outer.doFindAdditionalTypesUsingJsni(branch,unit);
  addAdditionalTypes(branch,typeNames);
  typeNames=outer.doFindAdditionalTypesUsingArtificialRescues(branch,unit);
  addAdditionalTypes(branch,typeNames);
  typeNames=outer.doFindAdditionalTypesUsingRebinds(branch,unit);
  addAdditionalTypes(branch,typeNames);
  if (typeNames.length > 0) {
    refreshPackagesFromCompState();
  }
  if (cuds != null) {
    cuds.add(unit);
  }
  jdtProcessNanos+=System.nanoTime() - processBeginNanos;
}