Program: 88609
Project: 88609
Buggy source:
/** 
 * Class Declaration Creation
 */
private void createClassDecl(polyglot.ast.ClassDecl cDecl){
  if (!cDecl.type().isTopLevel()) {
    SootClass outerClass=((soot.RefType)Util.getSootType(cDecl.type().outer())).getSootClass();
    if (InitialResolver.v().getInnerClassInfoMap() == null) {
      InitialResolver.v().setInnerClassInfoMap(new HashMap());
    }
    InitialResolver.v().getInnerClassInfoMap().put(sootClass,new InnerClassInfo(outerClass,cDecl.name(),InnerClassInfo.NESTED));
    sootClass.setOuterClass(outerClass);
  }
  polyglot.types.Flags flags=cDecl.flags();
  addModifiers(flags,cDecl);
  if (cDecl.superClass() == null) {
    soot.SootClass superClass=soot.Scene.v().getSootClass("String_Node_Str");
    sootClass.setSuperclass(superClass);
  }
 else {
    sootClass.setSuperclass(((soot.RefType)Util.getSootType(cDecl.superClass().type())).getSootClass());
    if (((polyglot.types.ClassType)cDecl.superClass().type()).isNested()) {
      polyglot.types.ClassType superType=(polyglot.types.ClassType)cDecl.superClass().type();
      Util.addInnerClassTag(sootClass,sootClass.getName(),((soot.RefType)Util.getSootType(superType.outer())).toString(),superType.name(),Util.getModifier(superType.flags()));
    }
  }
  Iterator interfacesIt=cDecl.interfaces().iterator();
  while (interfacesIt.hasNext()) {
    polyglot.ast.TypeNode next=(polyglot.ast.TypeNode)interfacesIt.next();
    sootClass.addInterface(((soot.RefType)Util.getSootType(next.type())).getSootClass());
  }
  findReferences(cDecl);
  createClassBody(cDecl.body());
  handleFieldInits();
  if ((staticFieldInits != null) || (staticInitializerBlocks != null)) {
    soot.SootMethod clinitMethod;
    if (!sootClass.declaresMethod("String_Node_Str",new ArrayList(),soot.VoidType.v())) {
      clinitMethod=new soot.SootMethod("String_Node_Str",new ArrayList(),soot.VoidType.v(),soot.Modifier.STATIC,new ArrayList());
      sootClass.addMethod(clinitMethod);
      PolyglotMethodSource mSource=new PolyglotMethodSource();
      mSource.setJBB(InitialResolver.v().getJBBFactory().createJimpleBodyBuilder());
      clinitMethod.setSource(mSource);
    }
 else {
      clinitMethod=sootClass.getMethod("String_Node_Str",new ArrayList(),soot.VoidType.v());
    }
    ((PolyglotMethodSource)clinitMethod.getSource()).setStaticFieldInits(staticFieldInits);
    ((PolyglotMethodSource)clinitMethod.getSource()).setStaticInitializerBlocks(staticInitializerBlocks);
  }
  if (cDecl.type().isLocal()) {
    AnonLocalClassInfo info=(AnonLocalClassInfo)InitialResolver.v().finalLocalInfo().get(new polyglot.util.IdentityKey(cDecl.type()));
    ArrayList finalsList=addFinalLocals(cDecl.body(),info.finalLocals(),cDecl.type(),info);
    Iterator it=sootClass.getMethods().iterator();
    while (it.hasNext()) {
      soot.SootMethod meth=(soot.SootMethod)it.next();
      if (meth.getName().equals("String_Node_Str")) {
        ((PolyglotMethodSource)meth.getSource()).setFinalsList(finalsList);
      }
    }
    if (!info.inStaticMethod()) {
      polyglot.types.ClassType outerType=cDecl.type().outer();
      addOuterClassThisRefToInit(outerType);
      addOuterClassThisRefField(outerType);
    }
  }
 else   if (cDecl.type().isNested() && !cDecl.flags().isStatic()) {
    polyglot.types.ClassType outerType=cDecl.type().outer();
    addOuterClassThisRefToInit(outerType);
    addOuterClassThisRefField(outerType);
  }
  Util.addLnPosTags(sootClass,cDecl.position());
}

Fixed version (ground truth):
/** 
 * Class Declaration Creation
 */
private void createClassDecl(polyglot.ast.ClassDecl cDecl){
  if (!cDecl.type().isTopLevel()) {
    SootClass outerClass=((soot.RefType)Util.getSootType(cDecl.type().outer())).getSootClass();
    if (InitialResolver.v().getInnerClassInfoMap() == null) {
      InitialResolver.v().setInnerClassInfoMap(new HashMap());
    }
    InitialResolver.v().getInnerClassInfoMap().put(sootClass,new InnerClassInfo(outerClass,cDecl.name(),InnerClassInfo.NESTED));
    sootClass.setOuterClass(outerClass);
  }
  polyglot.types.Flags flags=cDecl.flags();
  addModifiers(flags,cDecl);
  if (cDecl.superClass() == null) {
    soot.SootClass superClass=soot.Scene.v().getSootClass("String_Node_Str");
    sootClass.setSuperclass(superClass);
  }
 else {
    sootClass.setSuperclass(((soot.RefType)Util.getSootType(cDecl.superClass().type())).getSootClass());
    if (((polyglot.types.ClassType)cDecl.superClass().type()).isNested()) {
      polyglot.types.ClassType superType=(polyglot.types.ClassType)cDecl.superClass().type();
      Util.addInnerClassTag(sootClass,sootClass.getName(),((soot.RefType)Util.getSootType(superType.outer())).toString(),superType.name(),Util.getModifier(superType.flags()));
    }
  }
  Iterator interfacesIt=cDecl.interfaces().iterator();
  while (interfacesIt.hasNext()) {
    polyglot.ast.TypeNode next=(polyglot.ast.TypeNode)interfacesIt.next();
    sootClass.addInterface(((soot.RefType)Util.getSootType(next.type())).getSootClass());
  }
  findReferences(cDecl);
  createClassBody(cDecl.body());
  handleFieldInits();
  if ((staticFieldInits != null) || (staticInitializerBlocks != null)) {
    soot.SootMethod clinitMethod;
    if (!sootClass.declaresMethod("String_Node_Str",new ArrayList(),soot.VoidType.v())) {
      clinitMethod=new soot.SootMethod("String_Node_Str",new ArrayList(),soot.VoidType.v(),soot.Modifier.STATIC,new ArrayList());
      sootClass.addMethod(clinitMethod);
      PolyglotMethodSource mSource=new PolyglotMethodSource();
      mSource.setJBB(InitialResolver.v().getJBBFactory().createJimpleBodyBuilder());
      clinitMethod.setSource(mSource);
    }
 else {
      clinitMethod=sootClass.getMethod("String_Node_Str",new ArrayList(),soot.VoidType.v());
    }
    ((PolyglotMethodSource)clinitMethod.getSource()).setStaticFieldInits(staticFieldInits);
    ((PolyglotMethodSource)clinitMethod.getSource()).setStaticInitializerBlocks(staticInitializerBlocks);
  }
  if (cDecl.type().isLocal()) {
    AnonLocalClassInfo info=(AnonLocalClassInfo)InitialResolver.v().finalLocalInfo().get(new polyglot.util.IdentityKey(cDecl.type()));
    ArrayList finalsList=addFinalLocals(cDecl.body(),info.finalLocalsAvail(),cDecl.type(),info);
    Iterator it=sootClass.getMethods().iterator();
    while (it.hasNext()) {
      soot.SootMethod meth=(soot.SootMethod)it.next();
      if (meth.getName().equals("String_Node_Str")) {
        ((PolyglotMethodSource)meth.getSource()).setFinalsList(finalsList);
      }
    }
    if (!info.inStaticMethod()) {
      polyglot.types.ClassType outerType=cDecl.type().outer();
      addOuterClassThisRefToInit(outerType);
      addOuterClassThisRefField(outerType);
    }
  }
 else   if (cDecl.type().isNested() && !cDecl.flags().isStatic()) {
    polyglot.types.ClassType outerType=cDecl.type().outer();
    addOuterClassThisRefToInit(outerType);
    addOuterClassThisRefField(outerType);
  }
  Util.addLnPosTags(sootClass,cDecl.position());
}