Program: 9301
Project: 9301
Buggy source:
private ClassTypeSignature parseClassTypeSignature(){
  SimpleClassTypeSignature outerType=null;
  SimpleClassTypeSignature[] nestedTypes=new SimpleClassTypeSignature[0];
  StringBuffer ret=new StringBuffer();
  String identifier=eatIdentifier();
  ret.append(identifier);
  while (maybeEat("String_Node_Str")) {
    ret.append("String_Node_Str");
    ret.append(eatIdentifier());
  }
  identifier=ret.toString();
  while (!maybeEat("String_Node_Str")) {
    if (maybeEat("String_Node_Str")) {
      outerType=new SimpleClassTypeSignature(identifier);
      List nestedTypeList=new ArrayList();
      do {
        ret.append("String_Node_Str");
        SimpleClassTypeSignature sig=parseSimpleClassTypeSignature();
        ret.append(sig.toString());
        nestedTypeList.add(ret);
      }
 while (maybeEat("String_Node_Str"));
      nestedTypes=new SimpleClassTypeSignature[nestedTypeList.size()];
      nestedTypeList.toArray(nestedTypes);
    }
 else     if (tokenStream[tokenIndex].equals("String_Node_Str")) {
      ret.append("String_Node_Str");
      TypeArgument[] tArgs=maybeParseTypeArguments();
      for (int i=0; i < tArgs.length; i++) {
        ret.append(tArgs[i].toString());
      }
      ret.append("String_Node_Str");
      outerType=new SimpleClassTypeSignature(identifier,tArgs);
      List nestedTypeList=new ArrayList();
      while (maybeEat("String_Node_Str")) {
        ret.append("String_Node_Str");
        SimpleClassTypeSignature sig=parseSimpleClassTypeSignature();
        ret.append(sig.toString());
        nestedTypeList.add(ret);
      }
      nestedTypes=new SimpleClassTypeSignature[nestedTypeList.size()];
      nestedTypeList.toArray(nestedTypes);
    }
 else {
      throw new IllegalStateException("String_Node_Str" + tokenStream[tokenIndex]);
    }
  }
  ret.append("String_Node_Str");
  if (outerType == null)   outerType=new SimpleClassTypeSignature(ret.toString());
  return new ClassTypeSignature(ret.toString(),outerType,nestedTypes);
}

Fixed version (ground truth):
private ClassTypeSignature parseClassTypeSignature(){
  SimpleClassTypeSignature outerType=null;
  SimpleClassTypeSignature[] nestedTypes=new SimpleClassTypeSignature[0];
  StringBuffer ret=new StringBuffer();
  String identifier=eatIdentifier();
  ret.append(identifier);
  while (maybeEat("String_Node_Str")) {
    ret.append("String_Node_Str");
    ret.append(eatIdentifier());
  }
  identifier=ret.toString();
  while (!maybeEat("String_Node_Str")) {
    if (maybeEat("String_Node_Str")) {
      outerType=new SimpleClassTypeSignature(identifier);
      List nestedTypeList=new ArrayList();
      do {
        ret.append("String_Node_Str");
        SimpleClassTypeSignature sig=parseSimpleClassTypeSignature();
        ret.append(sig.toString());
        nestedTypeList.add(ret);
      }
 while (maybeEat("String_Node_Str"));
      nestedTypes=new SimpleClassTypeSignature[nestedTypeList.size()];
      nestedTypeList.toArray(nestedTypes);
    }
 else     if (tokenStream[tokenIndex].equals("String_Node_Str")) {
      ret.append("String_Node_Str");
      TypeArgument[] tArgs=maybeParseTypeArguments();
      for (int i=0; i < tArgs.length; i++) {
        ret.append(tArgs[i].toString());
      }
      ret.append("String_Node_Str");
      outerType=new SimpleClassTypeSignature(identifier,tArgs);
      List nestedTypeList=new ArrayList();
      while (maybeEat("String_Node_Str")) {
        ret.append("String_Node_Str");
        SimpleClassTypeSignature sig=parseSimpleClassTypeSignature();
        ret.append(sig.toString());
        nestedTypeList.add(sig);
      }
      nestedTypes=new SimpleClassTypeSignature[nestedTypeList.size()];
      nestedTypeList.toArray(nestedTypes);
    }
 else {
      throw new IllegalStateException("String_Node_Str" + tokenStream[tokenIndex]);
    }
  }
  ret.append("String_Node_Str");
  if (outerType == null)   outerType=new SimpleClassTypeSignature(ret.toString());
  return new ClassTypeSignature(ret.toString(),outerType,nestedTypes);
}