Program: 88688
Project: 88688
Buggy source:
/** 
 * Source Creation 
 */
private void createSource(polyglot.ast.SourceFile source){
  String simpleName=sootClass.getName();
  Iterator declsIt=source.decls().iterator();
  boolean found=false;
  while (declsIt.hasNext()) {
    Object next=declsIt.next();
    if (next instanceof polyglot.ast.ClassDecl) {
      polyglot.types.ClassType nextType=((polyglot.ast.ClassDecl)next).type();
      if (Util.getSootType(nextType).equals(sootClass.getType())) {
        createClassDecl((polyglot.ast.ClassDecl)next);
        found=true;
      }
 else {
        if (((polyglot.ast.ClassDecl)next).type().isTopLevel() && !((polyglot.ast.ClassDecl)next).flags().isPublic()) {
          if (sootClass.getName().indexOf("String_Node_Str") == -1) {
            addToClassToSourceMap(((polyglot.ast.ClassDecl)next).type().fullName(),sootClass.getName());
          }
        }
      }
    }
  }
  if (!found) {
    NestedClassListBuilder nestedClassBuilder=new NestedClassListBuilder();
    source.visit(nestedClassBuilder);
    Iterator nestedDeclsIt=nestedClassBuilder.getClassDeclsList().iterator();
    while (nestedDeclsIt.hasNext() && !found) {
      polyglot.ast.ClassDecl nextDecl=(polyglot.ast.ClassDecl)nestedDeclsIt.next();
      polyglot.types.ClassType type=(polyglot.types.ClassType)nextDecl.type();
      if (type.isLocal() && !type.isAnonymous()) {
        if (localClassMap.containsVal(simpleName)) {
          createClassDecl(((polyglot.ast.LocalClassDecl)localClassMap.getKey(simpleName)).decl());
          found=true;
        }
      }
 else {
        if (Util.getSootType(type).equals(sootClass.getType())) {
          createClassDecl(nextDecl);
          found=true;
        }
      }
    }
    if (!found) {
      if (anonClassMap.containsVal(simpleName)) {
        polyglot.ast.New aNew=(polyglot.ast.New)anonClassMap.getKey(simpleName);
        createAnonClassDecl(aNew);
        createClassBody(aNew.body());
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Source Creation 
 */
private void createSource(polyglot.ast.SourceFile source){
  String simpleName=sootClass.getName();
  Iterator declsIt=source.decls().iterator();
  boolean found=false;
  while (declsIt.hasNext()) {
    Object next=declsIt.next();
    if (next instanceof polyglot.ast.ClassDecl) {
      polyglot.types.ClassType nextType=((polyglot.ast.ClassDecl)next).type();
      if (Util.getSootType(nextType).equals(sootClass.getType())) {
        createClassDecl((polyglot.ast.ClassDecl)next);
        found=true;
      }
    }
  }
  if (!found) {
    NestedClassListBuilder nestedClassBuilder=new NestedClassListBuilder();
    source.visit(nestedClassBuilder);
    Iterator nestedDeclsIt=nestedClassBuilder.getClassDeclsList().iterator();
    while (nestedDeclsIt.hasNext() && !found) {
      polyglot.ast.ClassDecl nextDecl=(polyglot.ast.ClassDecl)nestedDeclsIt.next();
      polyglot.types.ClassType type=(polyglot.types.ClassType)nextDecl.type();
      if (type.isLocal() && !type.isAnonymous()) {
        if (localClassMap.containsVal(simpleName)) {
          createClassDecl(((polyglot.ast.LocalClassDecl)localClassMap.getKey(simpleName)).decl());
          found=true;
        }
      }
 else {
        if (Util.getSootType(type).equals(sootClass.getType())) {
          createClassDecl(nextDecl);
          found=true;
        }
      }
    }
    if (!found) {
      if (anonClassMap.containsVal(simpleName)) {
        polyglot.ast.New aNew=(polyglot.ast.New)anonClassMap.getKey(simpleName);
        createAnonClassDecl(aNew);
        createClassBody(aNew.body());
      }
    }
  }
}