Program: 10967
Project: 10967
Buggy source:
public <T>T parseFromText(Class<T> recordClazz,String text) throws RecordParserException {
  T record;
  try {
    record=recordClazz.newInstance();
  }
 catch (  Exception e) {
    throw new RecordParserException("String_Node_Str" + recordClazz,e);
  }
  List<DelimitedFieldDescriptor> delimitedFieldDescriptors=getRecordDescriptor().getFieldDescriptors();
  String[] textTokens=text.split(RegexUtil.escapeRegexMetacharacters(getRecordDescriptor().getDelimiter()));
  int tokensQtt=textTokens.length;
  for (int i=0; i < delimitedFieldDescriptors.size(); i++) {
    DelimitedFieldDescriptor actualFieldDescriptor=delimitedFieldDescriptors.get(i);
    String fieldValue;
    if (actualFieldDescriptor.getPositionIndex() <= tokensQtt) {
      fieldValue=textTokens[actualFieldDescriptor.getPositionIndex() - 1];
    }
 else {
      throw new RecordParserException("String_Node_Str" + actualFieldDescriptor.getGetter());
    }
    Method setter;
    Class<?> getterReturnType=actualFieldDescriptor.getGetter().getReturnType();
    try {
      setter=ReflectUtil.getSetterFromGetter(actualFieldDescriptor.getGetter(),new Class<?>[]{String.class},recordClazz);
    }
 catch (    NoSuchMethodException e1) {
      try {
        setter=ReflectUtil.getSetterFromGetter(actualFieldDescriptor.getGetter(),new Class<?>[]{getterReturnType},recordClazz);
      }
 catch (      NoSuchMethodException e2) {
        throw new RecordParserException("String_Node_Str" + actualFieldDescriptor.getGetter(),e2);
      }
    }
    Object parameter;
    try {
      FieldDecorator<?> decorator=actualFieldDescriptor.getDecorator();
      parameter=decorator.fromString(fieldValue);
      setter.invoke(record,parameter);
    }
 catch (    FieldDecoratorException e) {
      throw new RecordParserException(e);
    }
catch (    Exception e) {
      throw new RecordParserException("String_Node_Str" + setter,e);
    }
  }
  return record;
}

Fixed version (ground truth):
public <T>T parseFromText(Class<T> recordClazz,String text) throws RecordParserException {
  T record;
  try {
    record=recordClazz.newInstance();
  }
 catch (  Exception e) {
    throw new RecordParserException("String_Node_Str" + recordClazz,e);
  }
  List<DelimitedFieldDescriptor> delimitedFieldDescriptors=getRecordDescriptor().getFieldDescriptors();
  String[] textTokens=text.split(RegexUtil.escapeRegexMetacharacters(getRecordDescriptor().getDelimiter()),-1);
  int tokensQtt=textTokens.length;
  for (int i=0; i < delimitedFieldDescriptors.size(); i++) {
    DelimitedFieldDescriptor actualFieldDescriptor=delimitedFieldDescriptors.get(i);
    String fieldValue;
    if (actualFieldDescriptor.getPositionIndex() <= tokensQtt) {
      fieldValue=textTokens[actualFieldDescriptor.getPositionIndex() - 1];
    }
 else {
      throw new RecordParserException("String_Node_Str" + actualFieldDescriptor.getGetter());
    }
    Method setter;
    Class<?> getterReturnType=actualFieldDescriptor.getGetter().getReturnType();
    try {
      setter=ReflectUtil.getSetterFromGetter(actualFieldDescriptor.getGetter(),new Class<?>[]{String.class},recordClazz);
    }
 catch (    NoSuchMethodException e1) {
      try {
        setter=ReflectUtil.getSetterFromGetter(actualFieldDescriptor.getGetter(),new Class<?>[]{getterReturnType},recordClazz);
      }
 catch (      NoSuchMethodException e2) {
        throw new RecordParserException("String_Node_Str" + actualFieldDescriptor.getGetter(),e2);
      }
    }
    Object parameter;
    try {
      FieldDecorator<?> decorator=actualFieldDescriptor.getDecorator();
      parameter=decorator.fromString(fieldValue);
      setter.invoke(record,parameter);
    }
 catch (    FieldDecoratorException e) {
      throw new RecordParserException(e);
    }
catch (    Exception e) {
      throw new RecordParserException("String_Node_Str" + setter,e);
    }
  }
  return record;
}