Program: 32370
Project: 32370
Buggy source:
ST genFunctionAssign(ST stmts){
  Function f=(Function)arg2;
  if (multiRows()) {
    ST withIter=CodeGen.getVisitorST("String_Node_Str");
    stmts.add("String_Node_Str",withIter);
    if (f.isPython())     withIter.add("String_Node_Str","String_Node_Str" + f.codegen().render());
 else     withIter.add("String_Node_Str",f.codegen().render());
    withIter.add("String_Node_Str",CodeGen.uniqueVar("String_Node_Str"));
    String funcRet=CodeGen.uniqueVar("String_Node_Str");
    withIter.add("String_Node_Str",funcRet);
    if (isMultipleAssign() && f.isArrayType()) {
      @SuppressWarnings("String_Node_Str") List<Variable> lhs=(List<Variable>)arg1;
      withIter.add("String_Node_Str","String_Node_Str");
      for (int i=0; i < lhs.size(); i++) {
        Variable v=lhs.get(i);
        String varType=MyType.javaObjectTypeName(v);
        withIter.add("String_Node_Str",v + "String_Node_Str" + varType+ "String_Node_Str"+ funcRet+ "String_Node_Str"+ i+ "String_Node_Str");
      }
    }
 else     if (f.isPython()) {
      Variable lhs=(Variable)arg1;
      String pyToJava=MyType.javaObjectTypeName(lhs);
      if (MyType.isPrimNumberType(lhs.type)) {
        withIter.add("String_Node_Str","String_Node_Str");
        String valueGetter=valueGetter(lhs.type);
        withIter.add("String_Node_Str",lhs + "String_Node_Str" + pyToJava+ "String_Node_Str"+ funcRet+ "String_Node_Str"+ valueGetter);
      }
 else {
        withIter.add("String_Node_Str",MyType.javaObjectTypeName(lhs));
        withIter.add("String_Node_Str",lhs + "String_Node_Str" + pyToJava+ "String_Node_Str"+ funcRet);
      }
    }
 else {
      Variable lhs=(Variable)arg1;
      String lhsType=MyType.javaType(lhs).getName();
      withIter.add("String_Node_Str",lhsType);
      withIter.add("String_Node_Str",lhs + "String_Node_Str" + lhsType+ "String_Node_Str"+ funcRet);
    }
    return withIter;
  }
 else {
    if (isMultipleAssign() && f.isArrayType()) {
      String arrayVar=CodeGen.uniqueVar("String_Node_Str");
      @SuppressWarnings("String_Node_Str") List<Variable> lhs=(List<Variable>)arg1;
      stmts.add("String_Node_Str","String_Node_Str" + arrayVar + "String_Node_Str"+ f.codegen().render());
      for (int i=0; i < lhs.size(); i++) {
        Variable v=lhs.get(i);
        String varType=MyType.javaObjectTypeName(v);
        stmts.add("String_Node_Str",v + "String_Node_Str" + varType+ "String_Node_Str"+ arrayVar+ "String_Node_Str"+ i+ "String_Node_Str");
      }
    }
 else     if (f.isPython()) {
      Variable lhs=(Variable)arg1;
      String pyToJava=MyType.javaObjectTypeName(lhs);
      if (MyType.isPrimNumberType(lhs.type)) {
        String valueGetter=valueGetter(lhs.type);
        stmts.add("String_Node_Str",arg1 + "String_Node_Str" + pyToJava+ "String_Node_Str"+ f.codegen().render()+ "String_Node_Str"+ valueGetter);
      }
 else {
        stmts.add("String_Node_Str",arg1 + "String_Node_Str" + pyToJava+ "String_Node_Str"+ f.codegen().render()+ "String_Node_Str");
      }
    }
 else {
      stmts.add("String_Node_Str",arg1 + "String_Node_Str" + f.codegen().render());
    }
    return stmts;
  }
}

Fixed version (ground truth):
ST genFunctionAssign(ST stmts){
  Function f=(Function)arg2;
  if (multiRows()) {
    ST withIter=CodeGen.getVisitorST("String_Node_Str");
    stmts.add("String_Node_Str",withIter);
    if (f.isPython())     withIter.add("String_Node_Str","String_Node_Str" + f.codegen().render());
 else     withIter.add("String_Node_Str",f.codegen().render());
    withIter.add("String_Node_Str",CodeGen.uniqueVar("String_Node_Str"));
    String funcRet=CodeGen.uniqueVar("String_Node_Str");
    withIter.add("String_Node_Str",funcRet);
    if (isMultipleAssign() && f.isArrayType()) {
      @SuppressWarnings("String_Node_Str") List<Variable> lhs=(List<Variable>)arg1;
      if (f.isPrimArrayType())       withIter.add("String_Node_Str",MyType.javaType(lhs.get(0)) + "String_Node_Str");
 else       withIter.add("String_Node_Str","String_Node_Str");
      for (int i=0; i < lhs.size(); i++) {
        Variable v=lhs.get(i);
        String varType=MyType.javaObjectTypeName(v);
        withIter.add("String_Node_Str",v + "String_Node_Str" + varType+ "String_Node_Str"+ funcRet+ "String_Node_Str"+ i+ "String_Node_Str");
      }
    }
 else     if (f.isPython()) {
      Variable lhs=(Variable)arg1;
      String pyToJava=MyType.javaObjectTypeName(lhs);
      if (MyType.isPrimNumberType(lhs.type)) {
        withIter.add("String_Node_Str","String_Node_Str");
        String valueGetter=valueGetter(lhs.type);
        withIter.add("String_Node_Str",lhs + "String_Node_Str" + pyToJava+ "String_Node_Str"+ funcRet+ "String_Node_Str"+ valueGetter);
      }
 else {
        withIter.add("String_Node_Str",MyType.javaObjectTypeName(lhs));
        withIter.add("String_Node_Str",lhs + "String_Node_Str" + pyToJava+ "String_Node_Str"+ funcRet);
      }
    }
 else {
      Variable lhs=(Variable)arg1;
      String lhsType=MyType.javaType(lhs).getName();
      withIter.add("String_Node_Str",lhsType);
      withIter.add("String_Node_Str",lhs + "String_Node_Str" + lhsType+ "String_Node_Str"+ funcRet);
    }
    return withIter;
  }
 else {
    if (isMultipleAssign() && f.isArrayType()) {
      String arrayVar=CodeGen.uniqueVar("String_Node_Str");
      @SuppressWarnings("String_Node_Str") List<Variable> lhs=(List<Variable>)arg1;
      String arrType="String_Node_Str";
      if (f.isPrimArrayType())       arrType=MyType.javaType(lhs.get(0)) + "String_Node_Str";
      stmts.add("String_Node_Str",arrType + "String_Node_Str" + arrayVar+ "String_Node_Str"+ arrType+ "String_Node_Str"+ f.codegen().render());
      for (int i=0; i < lhs.size(); i++) {
        Variable v=lhs.get(i);
        String varType=MyType.javaObjectTypeName(v);
        stmts.add("String_Node_Str",v + "String_Node_Str" + varType+ "String_Node_Str"+ arrayVar+ "String_Node_Str"+ i+ "String_Node_Str");
      }
    }
 else     if (f.isPython()) {
      Variable lhs=(Variable)arg1;
      String pyToJava=MyType.javaObjectTypeName(lhs);
      if (MyType.isPrimNumberType(lhs.type)) {
        String valueGetter=valueGetter(lhs.type);
        stmts.add("String_Node_Str",arg1 + "String_Node_Str" + pyToJava+ "String_Node_Str"+ f.codegen().render()+ "String_Node_Str"+ valueGetter);
      }
 else {
        stmts.add("String_Node_Str",arg1 + "String_Node_Str" + pyToJava+ "String_Node_Str"+ f.codegen().render()+ "String_Node_Str");
      }
    }
 else {
      stmts.add("String_Node_Str",arg1 + "String_Node_Str" + f.codegen().render());
    }
    return stmts;
  }
}