Program: 53573
Project: 53573
Buggy source:
private Pair<JavaToJavaScriptMap,Set<JsNode>> execImpl(){
  CanObserveSubclassUninitializedFieldsVisitor canObserve=new CanObserveSubclassUninitializedFieldsVisitor();
  canObserve.accept(program);
  SortVisitor sorter=new SortVisitor();
  sorter.accept(program);
  RecordCrossClassCallsAndJSInlinableMethods recorder=new RecordCrossClassCallsAndJSInlinableMethods();
  recorder.accept(program);
  CreateNamesAndScopesVisitor creator=new CreateNamesAndScopesVisitor();
  creator.accept(program);
  GenerateJavaScriptVisitor generator=new GenerateJavaScriptVisitor(recorder.methodsForJsInlining);
  generator.accept(program);
  final Map<JsName,JMethod> nameToMethodMap=new HashMap<JsName,JMethod>();
  final HashMap<JsName,JField> nameToFieldMap=new HashMap<JsName,JField>();
  final HashMap<JsName,JClassType> constructorNameToTypeMap=new HashMap<JsName,JClassType>();
  for (  JDeclaredType type : program.getDeclaredTypes()) {
    JsName typeName=names.get(type);
    if (type instanceof JClassType && typeName != null) {
      constructorNameToTypeMap.put(typeName,(JClassType)type);
    }
    for (    JField field : type.getFields()) {
      if (field.isStatic()) {
        JsName fieldName=names.get(field);
        if (fieldName != null) {
          nameToFieldMap.put(fieldName,field);
        }
      }
    }
    for (    JMethod method : type.getMethods()) {
      JsName methodName=names.get(method);
      if (methodName != null) {
        nameToMethodMap.put(methodName,method);
      }
    }
  }
  jsProgram.setIndexedFields(indexedFields);
  jsProgram.setIndexedFunctions(indexedFunctions);
  JavaToJavaScriptMap jjsMap=new JavaToJavaScriptMap(){
    @Override public JsName nameForMethod(    JMethod method){
      return names.get(method);
    }
    @Override public JsName nameForType(    JClassType type){
      return names.get(type);
    }
    @Override public JField nameToField(    JsName name){
      return nameToFieldMap.get(name);
    }
    @Override public JMethod nameToMethod(    JsName name){
      return nameToMethodMap.get(name);
    }
    @Override public JClassType nameToType(    JsName name){
      return constructorNameToTypeMap.get(name);
    }
    @Override public JClassType typeForStatement(    JsStatement stat){
      return typeForStatMap.get(stat);
    }
    @Override public JMethod vtableInitToMethod(    JsStatement stat){
      return vtableInitForMethodMap.get(stat);
    }
  }
;
  return Pair.create(jjsMap,generator.functionsForJsInlining);
}

Fixed version (ground truth):
private Pair<JavaToJavaScriptMap,Set<JsNode>> execImpl(){
  new FixNameClashesVisitor().accept(program);
  CanObserveSubclassUninitializedFieldsVisitor canObserve=new CanObserveSubclassUninitializedFieldsVisitor();
  canObserve.accept(program);
  SortVisitor sorter=new SortVisitor();
  sorter.accept(program);
  RecordCrossClassCallsAndJSInlinableMethods recorder=new RecordCrossClassCallsAndJSInlinableMethods();
  recorder.accept(program);
  CreateNamesAndScopesVisitor creator=new CreateNamesAndScopesVisitor();
  creator.accept(program);
  GenerateJavaScriptVisitor generator=new GenerateJavaScriptVisitor(recorder.methodsForJsInlining);
  generator.accept(program);
  final Map<JsName,JMethod> nameToMethodMap=new HashMap<JsName,JMethod>();
  final HashMap<JsName,JField> nameToFieldMap=new HashMap<JsName,JField>();
  final HashMap<JsName,JClassType> constructorNameToTypeMap=new HashMap<JsName,JClassType>();
  for (  JDeclaredType type : program.getDeclaredTypes()) {
    JsName typeName=names.get(type);
    if (type instanceof JClassType && typeName != null) {
      constructorNameToTypeMap.put(typeName,(JClassType)type);
    }
    for (    JField field : type.getFields()) {
      if (field.isStatic()) {
        JsName fieldName=names.get(field);
        if (fieldName != null) {
          nameToFieldMap.put(fieldName,field);
        }
      }
    }
    for (    JMethod method : type.getMethods()) {
      JsName methodName=names.get(method);
      if (methodName != null) {
        nameToMethodMap.put(methodName,method);
      }
    }
  }
  jsProgram.setIndexedFields(indexedFields);
  jsProgram.setIndexedFunctions(indexedFunctions);
  JavaToJavaScriptMap jjsMap=new JavaToJavaScriptMap(){
    @Override public JsName nameForMethod(    JMethod method){
      return names.get(method);
    }
    @Override public JsName nameForType(    JClassType type){
      return names.get(type);
    }
    @Override public JField nameToField(    JsName name){
      return nameToFieldMap.get(name);
    }
    @Override public JMethod nameToMethod(    JsName name){
      return nameToMethodMap.get(name);
    }
    @Override public JClassType nameToType(    JsName name){
      return constructorNameToTypeMap.get(name);
    }
    @Override public JClassType typeForStatement(    JsStatement stat){
      return typeForStatMap.get(stat);
    }
    @Override public JMethod vtableInitToMethod(    JsStatement stat){
      return vtableInitForMethodMap.get(stat);
    }
  }
;
  return Pair.create(jjsMap,generator.functionsForJsInlining);
}