Program: 2442
Project: 2442
Buggy source:
private String generateMethods(ProtocolState ps){
  if (ps.isTerminal()) {
    return "String_Node_Str";
  }
  JobContext jc=this.job.getContext();
  Module main=jc.getMainModule();
  String method="String_Node_Str";
  SocketType st=getSocketType(ps);
switch (st) {
case SEND:
{
      for (      IOAction a : ps.getAcceptable()) {
        ProtocolState succ=ps.accept(a);
        String next=this.classNames.get(succ);
        String opref=getOp(a.mid);
        if (a.mid.isOp()) {
          method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getRoleClassName(a.peer)+ "String_Node_Str"+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
          if (!a.payload.isEmpty()) {
            int i=1;
            for (            PayloadType<? extends Kind> pt : a.payload.elems) {
              DataType dt=(DataType)pt;
              DataTypeDecl dtd=main.getDataTypeDecl(dt);
              method+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
            }
          }
          method+="String_Node_Str";
          method+="String_Node_Str" + opref;
          if (!a.payload.isEmpty()) {
            int i=1;
            for (            PayloadType<? extends Kind> pt : a.payload.elems) {
              method+="String_Node_Str" + i++;
            }
          }
          method+="String_Node_Str";
        }
 else {
          MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
          method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getRoleClassName(a.peer)+ "String_Node_Str"+ msd.extName+ "String_Node_Str";
          method+="String_Node_Str";
          method+="String_Node_Str";
        }
        method+="String_Node_Str" + next + "String_Node_Str";
        method+="String_Node_Str";
      }
      break;
    }
case RECEIVE:
{
    IOAction a=ps.getAcceptable().iterator().next();
    ProtocolState succ=ps.accept(a);
    String next=this.classNames.get(succ);
    if (a.mid.isOp()) {
      method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          method+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
        }
      }
      method+="String_Node_Str";
      method+="String_Node_Str" + getRole(a.peer) + "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          method+="String_Node_Str" + i + "String_Node_Str"+ dtd.extName+ "String_Node_Str"+ (i++ - 1)+ "String_Node_Str";
        }
      }
    }
 else {
      MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
      method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      method+="String_Node_Str" + msd.extName + "String_Node_Str";
      method+="String_Node_Str";
      method+="String_Node_Str" + getRole(a.peer) + "String_Node_Str";
      method+="String_Node_Str" + msd.extName + "String_Node_Str";
    }
    method+="String_Node_Str" + next + "String_Node_Str";
    method+="String_Node_Str";
    break;
  }
case BRANCH:
{
  String tmp=newClassName();
  String clazz="String_Node_Str";
  clazz+="String_Node_Str" + getPackageName() + "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+=generateImports(ps);
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + tmp + "String_Node_Str"+ SOCKET_CLASSES.get(SocketType.RECEIVE)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + tmp + "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  for (  IOAction a : ps.getAcceptable()) {
    ProtocolState succ=ps.accept(a);
    String next=this.classNames.get(succ);
    if (a.mid.isOp()) {
      clazz+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getPackageName(this.gpn)+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          clazz+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
        }
      }
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          clazz+="String_Node_Str" + i + "String_Node_Str"+ dtd.extName+ "String_Node_Str"+ (i++ - 1)+ "String_Node_Str";
        }
      }
    }
 else {
      MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
      clazz+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getPackageName(this.gpn)+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      clazz+="String_Node_Str" + msd.extName + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + msd.extName + "String_Node_Str";
    }
    clazz+="String_Node_Str" + next + "String_Node_Str";
    clazz+="String_Node_Str";
  }
  clazz+="String_Node_Str";
  this.classes.put(tmp,clazz);
  Iterator<IOAction> as=ps.getAcceptable().iterator();
  IOAction first=as.next();
  String next=tmp;
  method+="String_Node_Str" + next + "String_Node_Str";
  method+="String_Node_Str" + getRole(first.peer) + "String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str";
  method+="String_Node_Str" + getOp(first.mid) + "String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ SessionApiGenerator.getOpClassName(first.mid)+ "String_Node_Str";
  method+="String_Node_Str";
  for (; as.hasNext(); ) {
    IOAction a=as.next();
    method+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
    method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
    method+="String_Node_Str";
  }
  method+="String_Node_Str";
  method+="String_Node_Str";
  method+="String_Node_Str";
  method+="String_Node_Str" + next + "String_Node_Str";
  method+="String_Node_Str";
  as=ps.getAcceptable().iterator();
  first=as.next();
  method+="String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str";
  method+=SessionApiGenerator.getOpClassName(first.mid);
  for (; as.hasNext(); ) {
    IOAction a=as.next();
    method+="String_Node_Str" + SessionApiGenerator.getOpClassName(a.mid);
  }
  method+="String_Node_Str";
  break;
}
default :
{
throw new RuntimeException("String_Node_Str" + st);
}
}
return method;
}

Fixed version (ground truth):
private String generateMethods(ProtocolState ps){
  if (ps.isTerminal()) {
    return "String_Node_Str";
  }
  JobContext jc=this.job.getContext();
  Module main=jc.getMainModule();
  String method="String_Node_Str";
  SocketType st=getSocketType(ps);
switch (st) {
case SEND:
{
      for (      IOAction a : ps.getAcceptable()) {
        ProtocolState succ=ps.accept(a);
        String next=this.classNames.get(succ);
        String opref=getOp(a.mid);
        if (a.mid.isOp()) {
          method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getRoleClassName(a.peer)+ "String_Node_Str"+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
          if (!a.payload.isEmpty()) {
            int i=1;
            for (            PayloadType<? extends Kind> pt : a.payload.elems) {
              DataType dt=(DataType)pt;
              DataTypeDecl dtd=main.getDataTypeDecl(dt);
              method+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
            }
          }
          method+="String_Node_Str";
          method+="String_Node_Str" + opref;
          if (!a.payload.isEmpty()) {
            for (int i=1; i <= a.payload.elems.size(); i++) {
              method+="String_Node_Str" + i;
            }
          }
          method+="String_Node_Str";
        }
 else {
          MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
          method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getRoleClassName(a.peer)+ "String_Node_Str"+ msd.extName+ "String_Node_Str";
          method+="String_Node_Str";
          method+="String_Node_Str";
        }
        method+="String_Node_Str" + next + "String_Node_Str";
        method+="String_Node_Str";
      }
      break;
    }
case RECEIVE:
{
    IOAction a=ps.getAcceptable().iterator().next();
    ProtocolState succ=ps.accept(a);
    String next=this.classNames.get(succ);
    if (a.mid.isOp()) {
      method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          method+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
        }
      }
      method+="String_Node_Str";
      method+="String_Node_Str" + getRole(a.peer) + "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          method+="String_Node_Str" + i + "String_Node_Str"+ dtd.extName+ "String_Node_Str"+ (i++ - 1)+ "String_Node_Str";
        }
      }
    }
 else {
      MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
      method+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      method+="String_Node_Str" + msd.extName + "String_Node_Str";
      method+="String_Node_Str";
      method+="String_Node_Str" + getRole(a.peer) + "String_Node_Str";
      method+="String_Node_Str" + msd.extName + "String_Node_Str";
    }
    method+="String_Node_Str" + next + "String_Node_Str";
    method+="String_Node_Str";
    break;
  }
case BRANCH:
{
  String tmp=newClassName();
  String clazz="String_Node_Str";
  clazz+="String_Node_Str" + getPackageName() + "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+=generateImports(ps);
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + tmp + "String_Node_Str"+ SOCKET_CLASSES.get(SocketType.RECEIVE)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str" + tmp + "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str"+ this.classNames.get(ps)+ "String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  clazz+="String_Node_Str";
  for (  IOAction a : ps.getAcceptable()) {
    ProtocolState succ=ps.accept(a);
    String next=this.classNames.get(succ);
    if (a.mid.isOp()) {
      clazz+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getPackageName(this.gpn)+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          clazz+="String_Node_Str" + dtd.extName + "String_Node_Str"+ i++;
        }
      }
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      if (!a.payload.isEmpty()) {
        int i=1;
        for (        PayloadType<? extends Kind> pt : a.payload.elems) {
          DataType dt=(DataType)pt;
          DataTypeDecl dtd=main.getDataTypeDecl(dt);
          clazz+="String_Node_Str" + i + "String_Node_Str"+ dtd.extName+ "String_Node_Str"+ (i++ - 1)+ "String_Node_Str";
        }
      }
    }
 else {
      MessageSigNameDecl msd=main.getMessageSigDecl(((MessageSigName)a.mid).getSimpleName());
      clazz+="String_Node_Str" + next + "String_Node_Str"+ SessionApiGenerator.getPackageName(this.gpn)+ "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
      clazz+="String_Node_Str" + msd.extName + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str";
      clazz+="String_Node_Str" + msd.extName + "String_Node_Str";
    }
    clazz+="String_Node_Str" + next + "String_Node_Str";
    clazz+="String_Node_Str";
  }
  clazz+="String_Node_Str";
  this.classes.put(tmp,clazz);
  Iterator<IOAction> as=ps.getAcceptable().iterator();
  IOAction first=as.next();
  String next=tmp;
  method+="String_Node_Str" + next + "String_Node_Str";
  method+="String_Node_Str" + getRole(first.peer) + "String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str";
  method+="String_Node_Str" + getOp(first.mid) + "String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ SessionApiGenerator.getOpClassName(first.mid)+ "String_Node_Str";
  method+="String_Node_Str";
  for (; as.hasNext(); ) {
    IOAction a=as.next();
    method+="String_Node_Str" + getOp(a.mid) + "String_Node_Str";
    method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str"+ SessionApiGenerator.getOpClassName(a.mid)+ "String_Node_Str";
    method+="String_Node_Str";
  }
  method+="String_Node_Str";
  method+="String_Node_Str";
  method+="String_Node_Str";
  method+="String_Node_Str" + next + "String_Node_Str";
  method+="String_Node_Str";
  as=ps.getAcceptable().iterator();
  first=as.next();
  method+="String_Node_Str";
  method+="String_Node_Str" + this.classNames.get(ps) + "String_Node_Str";
  method+=SessionApiGenerator.getOpClassName(first.mid);
  for (; as.hasNext(); ) {
    IOAction a=as.next();
    method+="String_Node_Str" + SessionApiGenerator.getOpClassName(a.mid);
  }
  method+="String_Node_Str";
  break;
}
default :
{
throw new RuntimeException("String_Node_Str" + st);
}
}
return method;
}