Program: 85279
Project: 85279
Buggy source:
public Dependencies makeSootClass(SootClass sc,ClassDef defItem,DexFile dexFile){
  String superClass=defItem.getSuperclass();
  Dependencies deps=new Dependencies();
  String sourceFile=defItem.getSourceFile();
  if (sourceFile != null) {
    sc.addTag(new SourceFileTag(sourceFile));
  }
  if (superClass != null) {
    String superClassName=Util.dottedClassName(superClass);
    SootClass sootSuperClass=SootResolver.v().makeClassRef(superClassName);
    sc.setSuperclass(sootSuperClass);
    deps.typesToHierarchy.add(sootSuperClass.getType());
  }
  int accessFlags=defItem.getAccessFlags();
  sc.setModifiers(accessFlags);
  if (defItem.getInterfaces() != null) {
    for (    String interfaceName : defItem.getInterfaces()) {
      String interfaceClassName=Util.dottedClassName(interfaceName);
      if (sc.implementsInterface(interfaceClassName))       continue;
      SootClass interfaceClass=SootResolver.v().makeClassRef(interfaceClassName);
      interfaceClass.setModifiers(interfaceClass.getModifiers() | Modifier.INTERFACE);
      sc.addInterface(interfaceClass);
      deps.typesToHierarchy.add(interfaceClass.getType());
    }
  }
  if (Options.v().oaat() && sc.resolvingLevel() <= SootClass.HIERARCHY) {
    return deps;
  }
  DexAnnotation da=new DexAnnotation(sc,deps);
  for (  Field sf : defItem.getStaticFields()) {
    if (sc.declaresField(sf.getName(),DexType.toSoot(sf.getType())))     continue;
    SootField sootField=DexField.makeSootField(sf);
    sc.addField(sootField);
    da.handleFieldAnnotation(sootField,sf);
  }
  for (  Field f : defItem.getInstanceFields()) {
    if (sc.declaresField(f.getName(),DexType.toSoot(f.getType())))     continue;
    SootField sootField=DexField.makeSootField(f);
    sc.addField(sootField);
    da.handleFieldAnnotation(sootField,f);
  }
  for (  Method method : defItem.getDirectMethods()) {
    loadMethod(dexFile,method,sc,da);
  }
  for (  Method method : defItem.getVirtualMethods()) {
    loadMethod(dexFile,method,sc,da);
  }
  da.handleClassAnnotation(defItem);
  InnerClassAttribute ica=(InnerClassAttribute)sc.getTag("String_Node_Str");
  if (ica != null) {
    Iterator<InnerClassTag> innerTagIt=ica.getSpecs().iterator();
    while (innerTagIt.hasNext()) {
      Tag t=innerTagIt.next();
      if (t instanceof InnerClassTag) {
        InnerClassTag ict=(InnerClassTag)t;
        String inner=ict.getInnerClass().replaceAll("String_Node_Str","String_Node_Str");
        if (!inner.equals(sc.getName()))         continue;
        String outer=null;
        if (ict.getOuterClass() == null) {
          outer=ict.getInnerClass().replaceAll("String_Node_Str","String_Node_Str").replaceAll("String_Node_Str","String_Node_Str");
        }
 else {
          outer=ict.getOuterClass().replaceAll("String_Node_Str","String_Node_Str");
        }
        SootClass osc=SootResolver.v().makeClassRef(outer);
        if (osc == sc) {
          if (!sc.hasOuterClass())           continue;
          osc=sc.getOuterClass();
        }
 else         deps.typesToHierarchy.add(osc.getType());
        InnerClassAttribute icat=(InnerClassAttribute)osc.getTag("String_Node_Str");
        if (icat == null) {
          icat=new InnerClassAttribute();
          osc.addTag(icat);
        }
        InnerClassTag newt=new InnerClassTag(ict.getInnerClass(),ict.getOuterClass(),ict.getShortName(),ict.getAccessFlags());
        icat.add(newt);
        innerTagIt.remove();
        if (!sc.hasTag("String_Node_Str")) {
          if (((InnerClassTag)t).getInnerClass().replaceAll("String_Node_Str","String_Node_Str").equals(sc.toString())) {
            sc.addTag(t);
          }
        }
      }
    }
    if (ica.getSpecs().isEmpty())     sc.getTags().remove(ica);
  }
  return deps;
}

Fixed version (ground truth):
public Dependencies makeSootClass(SootClass sc,ClassDef defItem,DexFile dexFile){
  String superClass=defItem.getSuperclass();
  Dependencies deps=new Dependencies();
  String sourceFile=defItem.getSourceFile();
  if (sourceFile != null) {
    sc.addTag(new SourceFileTag(sourceFile));
  }
  if (superClass != null) {
    String superClassName=Util.dottedClassName(superClass);
    SootClass sootSuperClass=SootResolver.v().makeClassRef(superClassName);
    sc.setSuperclass(sootSuperClass);
    deps.typesToHierarchy.add(sootSuperClass.getType());
  }
  int accessFlags=defItem.getAccessFlags();
  sc.setModifiers(accessFlags);
  if (defItem.getInterfaces() != null) {
    for (    String interfaceName : defItem.getInterfaces()) {
      String interfaceClassName=Util.dottedClassName(interfaceName);
      if (sc.implementsInterface(interfaceClassName))       continue;
      SootClass interfaceClass=SootResolver.v().makeClassRef(interfaceClassName);
      interfaceClass.setModifiers(interfaceClass.getModifiers() | Modifier.INTERFACE);
      sc.addInterface(interfaceClass);
      deps.typesToHierarchy.add(interfaceClass.getType());
    }
  }
  if (Options.v().oaat() && sc.resolvingLevel() <= SootClass.HIERARCHY) {
    return deps;
  }
  DexAnnotation da=new DexAnnotation(sc,deps);
  for (  Field sf : defItem.getStaticFields()) {
    if (sc.declaresField(sf.getName(),DexType.toSoot(sf.getType())))     continue;
    SootField sootField=DexField.makeSootField(sf);
    sc.addField(sootField);
    da.handleFieldAnnotation(sootField,sf);
  }
  for (  Field f : defItem.getInstanceFields()) {
    if (sc.declaresField(f.getName(),DexType.toSoot(f.getType())))     continue;
    SootField sootField=DexField.makeSootField(f);
    sc.addField(sootField);
    da.handleFieldAnnotation(sootField,f);
  }
  for (  Method method : defItem.getDirectMethods()) {
    loadMethod(dexFile,method,sc,da);
  }
  for (  Method method : defItem.getVirtualMethods()) {
    loadMethod(dexFile,method,sc,da);
  }
  da.handleClassAnnotation(defItem);
  InnerClassAttribute ica=(InnerClassAttribute)sc.getTag("String_Node_Str");
  if (ica != null) {
    Iterator<InnerClassTag> innerTagIt=ica.getSpecs().iterator();
    while (innerTagIt.hasNext()) {
      Tag t=innerTagIt.next();
      if (t instanceof InnerClassTag) {
        InnerClassTag ict=(InnerClassTag)t;
        String inner=ict.getInnerClass().replaceAll("String_Node_Str","String_Node_Str");
        if (!inner.equals(sc.getName()))         continue;
        String outer=null;
        if (ict.getOuterClass() == null) {
          if (inner.contains("String_Node_Str")) {
            outer=inner.substring(0,inner.indexOf("String_Node_Str"));
          }
 else           if (inner.contains("String_Node_Str")) {
            outer=inner.substring(0,inner.lastIndexOf('$'));
          }
 else {
            throw new RuntimeException("String_Node_Str" + inner + "String_Node_Str");
          }
        }
 else {
          outer=ict.getOuterClass().replaceAll("String_Node_Str","String_Node_Str");
        }
        SootClass osc=SootResolver.v().makeClassRef(outer);
        if (osc == sc) {
          if (!sc.hasOuterClass())           continue;
          osc=sc.getOuterClass();
        }
 else         deps.typesToHierarchy.add(osc.getType());
        InnerClassAttribute icat=(InnerClassAttribute)osc.getTag("String_Node_Str");
        if (icat == null) {
          icat=new InnerClassAttribute();
          osc.addTag(icat);
        }
        InnerClassTag newt=new InnerClassTag(ict.getInnerClass(),ict.getOuterClass(),ict.getShortName(),ict.getAccessFlags());
        icat.add(newt);
        innerTagIt.remove();
        if (!sc.hasTag("String_Node_Str")) {
          if (((InnerClassTag)t).getInnerClass().replaceAll("String_Node_Str","String_Node_Str").equals(sc.toString())) {
            sc.addTag(t);
          }
        }
      }
    }
    if (ica.getSpecs().isEmpty())     sc.getTags().remove(ica);
  }
  return deps;
}