Program: 88684
Project: 88684
Buggy source:
/** 
 * Type handling
 */
public static soot.Type getSootType(polyglot.types.Type type){
  soot.Type sootType=null;
  if (type.isInt()) {
    sootType=soot.IntType.v();
  }
 else   if (type.isArray()) {
    polyglot.types.Type polyglotBase=((polyglot.types.ArrayType)type).base();
    while (polyglotBase instanceof polyglot.types.ArrayType) {
      polyglotBase=((polyglot.types.ArrayType)polyglotBase).base();
    }
    soot.Type baseType=getSootType(polyglotBase);
    int dims=((polyglot.types.ArrayType)type).dims();
    sootType=soot.ArrayType.v(baseType,dims);
  }
 else   if (type.isBoolean()) {
    sootType=soot.BooleanType.v();
  }
 else   if (type.isByte()) {
    sootType=soot.ByteType.v();
  }
 else   if (type.isChar()) {
    sootType=soot.CharType.v();
  }
 else   if (type.isDouble()) {
    sootType=soot.DoubleType.v();
  }
 else   if (type.isFloat()) {
    sootType=soot.FloatType.v();
  }
 else   if (type.isLong()) {
    sootType=soot.LongType.v();
  }
 else   if (type.isShort()) {
    sootType=soot.ShortType.v();
  }
 else   if (type.isNull()) {
    sootType=soot.NullType.v();
  }
 else   if (type.isVoid()) {
    sootType=soot.VoidType.v();
  }
 else   if (type.isClass()) {
    polyglot.types.ClassType classType=(polyglot.types.ClassType)type;
    String className;
    if (classType.isNested()) {
      if (classType.isAnonymous()) {
        className=(String)soot.javaToJimple.InitialResolver.v().getAnonTypeMap().get(new polyglot.util.IdentityKey(classType));
      }
 else       if (classType.isLocal()) {
        className=(String)soot.javaToJimple.InitialResolver.v().getLocalTypeMap().get(new polyglot.util.IdentityKey(classType));
      }
 else {
        String fullName=classType.fullName();
        String pkgName="String_Node_Str";
        if (classType.package_() != null) {
          pkgName=classType.package_().fullName();
        }
        className=classType.name();
        if (classType.outer().isAnonymous() || classType.outer().isLocal()) {
          className=getSootType(classType.outer()).toString() + "String_Node_Str" + className;
        }
 else {
          while (classType.outer() != null) {
            className=classType.outer().name() + "String_Node_Str" + className;
            classType=classType.outer();
          }
          if (!pkgName.equals("String_Node_Str")) {
            className=pkgName + "String_Node_Str" + className;
          }
        }
      }
    }
 else {
      className=classType.fullName();
    }
    sootType=soot.RefType.v(className);
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  return sootType;
}

Fixed version (ground truth):
/** 
 * Type handling
 */
public static soot.Type getSootType(polyglot.types.Type type){
  soot.Type sootType=null;
  if (type.isInt()) {
    sootType=soot.IntType.v();
  }
 else   if (type.isArray()) {
    polyglot.types.Type polyglotBase=((polyglot.types.ArrayType)type).base();
    while (polyglotBase instanceof polyglot.types.ArrayType) {
      polyglotBase=((polyglot.types.ArrayType)polyglotBase).base();
    }
    soot.Type baseType=getSootType(polyglotBase);
    int dims=((polyglot.types.ArrayType)type).dims();
    sootType=soot.ArrayType.v(baseType,dims);
  }
 else   if (type.isBoolean()) {
    sootType=soot.BooleanType.v();
  }
 else   if (type.isByte()) {
    sootType=soot.ByteType.v();
  }
 else   if (type.isChar()) {
    sootType=soot.CharType.v();
  }
 else   if (type.isDouble()) {
    sootType=soot.DoubleType.v();
  }
 else   if (type.isFloat()) {
    sootType=soot.FloatType.v();
  }
 else   if (type.isLong()) {
    sootType=soot.LongType.v();
  }
 else   if (type.isShort()) {
    sootType=soot.ShortType.v();
  }
 else   if (type.isNull()) {
    sootType=soot.NullType.v();
  }
 else   if (type.isVoid()) {
    sootType=soot.VoidType.v();
  }
 else   if (type.isClass()) {
    polyglot.types.ClassType classType=(polyglot.types.ClassType)type;
    String className;
    if (classType.isNested()) {
      if (classType.isAnonymous() && (soot.javaToJimple.InitialResolver.v().getAnonTypeMap() != null) && soot.javaToJimple.InitialResolver.v().getAnonTypeMap().containsKey(new polyglot.util.IdentityKey(classType))) {
        className=(String)soot.javaToJimple.InitialResolver.v().getAnonTypeMap().get(new polyglot.util.IdentityKey(classType));
      }
 else       if (classType.isLocal() && (soot.javaToJimple.InitialResolver.v().getLocalTypeMap() != null) && soot.javaToJimple.InitialResolver.v().getLocalTypeMap().containsKey(new polyglot.util.IdentityKey(classType))) {
        className=(String)soot.javaToJimple.InitialResolver.v().getLocalTypeMap().get(new polyglot.util.IdentityKey(classType));
      }
 else {
        String fullName=classType.fullName();
        String pkgName="String_Node_Str";
        if (classType.package_() != null) {
          pkgName=classType.package_().fullName();
        }
        className=classType.name();
        if (classType.outer().isAnonymous() || classType.outer().isLocal()) {
          className=getSootType(classType.outer()).toString() + "String_Node_Str" + className;
        }
 else {
          while (classType.outer() != null) {
            className=classType.outer().name() + "String_Node_Str" + className;
            classType=classType.outer();
          }
          if (!pkgName.equals("String_Node_Str")) {
            className=pkgName + "String_Node_Str" + className;
          }
        }
      }
    }
 else {
      className=classType.fullName();
    }
    sootType=soot.RefType.v(className);
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  return sootType;
}