Program: 53473
Project: 53473
Buggy source:
/** 
 * Translates and stitches (unifies) type ASTs into one connected graph.<br /> Only types reachable from entry points are traversed. This speeds, saves memory trims unreferenced elements.
 */
public void exec() throws UnableToCompleteException {
  List<String> entryMethodNames=new ArrayList<String>();
  for (  JMethod entryMethod : program.getEntryMethods()) {
    flowInto(entryMethod);
    entryMethodNames.add(entryMethod.getJsniSignature(true,false));
  }
  List<String> rootTypeBinaryNames=new ArrayList<String>();
  for (  String rootTypeSourceName : rootTypeSourceNames) {
    JDeclaredType rootType=internalFindType(rootTypeSourceName,sourceNameBasedTypeLocator,true);
    if (rootType == null) {
      continue;
    }
    rootTypeBinaryNames.add(rootType.getName());
    if (jsInteropEnabled && (isJsType(rootType) || hasAnyExports(rootType))) {
      fullFlowIntoType(rootType);
    }
  }
  minimalRebuildCache.setRootTypeNames(rootTypeBinaryNames);
  minimalRebuildCache.setEntryMethodNames(entryMethodNames);
  for (  JClassType type : program.codeGenTypes) {
    for (    JMethod method : type.getMethods()) {
      flowInto(method);
    }
    for (    JField field : type.getFields()) {
      flowInto(field);
    }
  }
  if (incrementalCompile) {
    fullFlowIntoRemainingStaleTypes();
  }
  instantiate(program.getTypeJavaLangString());
  flowInto(program.getIndexedMethod("String_Node_Str"));
  mapApi(program.getTypeJavaLangString());
  flowInto(methodMap.get("String_Node_Str"));
  AutoboxUtils autoboxUtils=new AutoboxUtils(program);
  for (  JMethod method : autoboxUtils.getBoxMethods()) {
    flowInto(method);
  }
  for (  JMethod method : autoboxUtils.getUnboxMethods()) {
    flowInto(method);
  }
  if (compilerContext.getOptions().isRunAsyncEnabled()) {
    flowInto(program.getIndexedMethod("String_Node_Str"));
    flowInto(program.getIndexedMethod("String_Node_Str"));
  }
  staticInitialize(program.getTypeClassLiteralHolder());
  for (  JMethod method : program.getTypeJavaLangClass().getMethods()) {
    if (method.isStatic() && method.getName().startsWith("String_Node_Str")) {
      flowInto(method);
    }
  }
  mainLoop();
  if (incrementalCompile) {
    int declaredTypesInModule=program.getModuleDeclaredTypes().size();
    MetricName.DECLARED_TYPES_IN_MODULE.setAmount(logger,declaredTypesInModule);
    logger.log(TreeLogger.INFO,"String_Node_Str" + liveFieldsAndMethods.size() + "String_Node_Str"+ program.getDeclaredTypes().size()+ "String_Node_Str"+ declaredTypesInModule+ "String_Node_Str"+ fullFlowTypes.size()+ "String_Node_Str");
    Set<String> remainingStaleTypeNames=computeRemainingStaleTypeNames();
    if (!remainingStaleTypeNames.isEmpty()) {
      logger.log(TreeLogger.WARN,"String_Node_Str" + remainingStaleTypeNames + "String_Node_Str"+ "String_Node_Str");
    }
    minimalRebuildCache.setProcessedStaleTypeNames(fullFlowTypes);
  }
  computeOverrides();
  pruneDeadFieldsAndMethods();
  if (errorsFound) {
    throw new UnableToCompleteException();
  }
}

Fixed version (ground truth):
/** 
 * Translates and stitches (unifies) type ASTs into one connected graph.<br /> Only types reachable from entry points are traversed. This speeds, saves memory trims unreferenced elements.
 */
public void exec() throws UnableToCompleteException {
  List<String> entryMethodNames=new ArrayList<String>();
  for (  JMethod entryMethod : program.getEntryMethods()) {
    flowInto(entryMethod);
    entryMethodNames.add(entryMethod.getJsniSignature(true,true));
  }
  List<String> rootTypeBinaryNames=new ArrayList<String>();
  for (  String rootTypeSourceName : rootTypeSourceNames) {
    JDeclaredType rootType=internalFindType(rootTypeSourceName,sourceNameBasedTypeLocator,true);
    if (rootType == null) {
      continue;
    }
    rootTypeBinaryNames.add(rootType.getName());
    if (jsInteropEnabled && (isJsType(rootType) || hasAnyExports(rootType))) {
      fullFlowIntoType(rootType);
    }
  }
  minimalRebuildCache.setRootTypeNames(rootTypeBinaryNames);
  minimalRebuildCache.setEntryMethodNames(entryMethodNames);
  for (  JClassType type : program.codeGenTypes) {
    for (    JMethod method : type.getMethods()) {
      flowInto(method);
    }
    for (    JField field : type.getFields()) {
      flowInto(field);
    }
  }
  if (incrementalCompile) {
    fullFlowIntoRemainingStaleTypes();
  }
  instantiate(program.getTypeJavaLangString());
  flowInto(program.getIndexedMethod("String_Node_Str"));
  mapApi(program.getTypeJavaLangString());
  flowInto(methodMap.get("String_Node_Str"));
  AutoboxUtils autoboxUtils=new AutoboxUtils(program);
  for (  JMethod method : autoboxUtils.getBoxMethods()) {
    flowInto(method);
  }
  for (  JMethod method : autoboxUtils.getUnboxMethods()) {
    flowInto(method);
  }
  if (compilerContext.getOptions().isRunAsyncEnabled()) {
    flowInto(program.getIndexedMethod("String_Node_Str"));
    flowInto(program.getIndexedMethod("String_Node_Str"));
  }
  staticInitialize(program.getTypeClassLiteralHolder());
  for (  JMethod method : program.getTypeJavaLangClass().getMethods()) {
    if (method.isStatic() && method.getName().startsWith("String_Node_Str")) {
      flowInto(method);
    }
  }
  mainLoop();
  if (incrementalCompile) {
    int declaredTypesInModule=program.getModuleDeclaredTypes().size();
    MetricName.DECLARED_TYPES_IN_MODULE.setAmount(logger,declaredTypesInModule);
    logger.log(TreeLogger.INFO,"String_Node_Str" + liveFieldsAndMethods.size() + "String_Node_Str"+ program.getDeclaredTypes().size()+ "String_Node_Str"+ declaredTypesInModule+ "String_Node_Str"+ fullFlowTypes.size()+ "String_Node_Str");
    Set<String> remainingStaleTypeNames=computeRemainingStaleTypeNames();
    if (!remainingStaleTypeNames.isEmpty()) {
      logger.log(TreeLogger.WARN,"String_Node_Str" + remainingStaleTypeNames + "String_Node_Str"+ "String_Node_Str");
    }
    minimalRebuildCache.setProcessedStaleTypeNames(fullFlowTypes);
  }
  computeOverrides();
  pruneDeadFieldsAndMethods();
  if (errorsFound) {
    throw new UnableToCompleteException();
  }
}