Program: 143483
Project: 143483
Buggy source:
@SuppressWarnings("String_Node_Str") private RowData getRows(int startRow,int lastRow){
  if (currentFoundset == null)   return RowData.EMPTY;
  List<Map<String,Object>> rows=new ArrayList<>();
  int startIdx=(currentPage - 1) * PAGE_SIZE;
  int endIdx=currentPage * PAGE_SIZE;
  if (endIdx > currentFoundset.getSize())   endIdx=currentFoundset.getSize();
  int foundsetStartRow=startIdx;
  int startOffset=0;
  if (startRow != -1) {
    if (startRow < endIdx && lastRow > startIdx) {
      startIdx=Math.max(startIdx,startRow);
      endIdx=Math.min(endIdx,lastRow);
      startOffset=Math.max(startIdx - startRow,0);
    }
 else     return RowData.EMPTY;
  }
  int currentIndex=startTabSeqIndex + startOffset * components.values().size();
  for (int i=startIdx; i < endIdx; i++) {
    IRecordInternal record=currentFoundset.getRecord(i);
    dataAdapterList.setRecord(record,false);
    Map<String,Object> rowProperties=new HashMap<String,Object>();
    rowProperties.put("String_Node_Str",record.getPKHashKey() + "String_Node_Str" + i);
    for (    WebComponent wc : components.values()) {
      List<String> dataproviders=getWebComponentPropertyType(wc,PropertyType.dataprovider);
      Map<String,Object> cellProperties=new HashMap<>();
      for (      String dataproviderID : dataproviders) {
        cellProperties.put(dataproviderID,wc.getProperty(dataproviderID));
      }
      Object valuelistObj;
      for (      String valuelistProperty : wc.getFormElement().getValuelistProperties()) {
        if ((valuelistObj=wc.getProperty(valuelistProperty)) instanceof IValueList) {
          IValueList valuelist=(IValueList)valuelistObj;
          if (valuelist.getValueList().getValueListType() == IValueListConstants.GLOBAL_METHOD_VALUES || valuelist.getValueList().getDatabaseValuesType() == IValueListConstants.RELATED_VALUES || valuelist.getFallbackValueList() != null)           cellProperties.put(valuelistProperty,new ValuelistWrapper(valuelist,record));
        }
      }
      cellProperties.put("String_Node_Str",wc.getName());
      rowProperties.put(wc.getName(),cellProperties);
    }
    List<TabSequencePropertyWithComponent> tabSeqComponents=getTabSeqComponents();
    for (    TabSequencePropertyWithComponent propertyWithComponent : tabSeqComponents) {
      Map<String,Object> cellProperties=(Map<String,Object>)rowProperties.get(propertyWithComponent.getComponent().getName());
      cellProperties.put(propertyWithComponent.getProperty(),currentIndex++);
    }
    rows.add(rowProperties);
  }
  dataAdapterList.setRecord(currentFoundset.getRecord(currentFoundset.getSelectedIndex()),false);
  return new RowData(rows,startIdx - foundsetStartRow,endIdx - foundsetStartRow);
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") private RowData getRows(int startRow,int lastRow){
  if (currentFoundset == null)   return RowData.EMPTY;
  List<Map<String,Object>> rows=new ArrayList<>();
  int startIdx=(currentPage - 1) * getPageSize();
  int endIdx=currentPage * getPageSize();
  if (endIdx > currentFoundset.getSize())   endIdx=currentFoundset.getSize();
  int foundsetStartRow=startIdx;
  int startOffset=0;
  if (startRow != -1) {
    if (startRow < endIdx && lastRow > startIdx) {
      startIdx=Math.max(startIdx,startRow);
      endIdx=Math.min(endIdx,lastRow);
      startOffset=Math.max(startIdx - startRow,0);
    }
 else     return RowData.EMPTY;
  }
  int currentIndex=startTabSeqIndex + startOffset * components.values().size();
  for (int i=startIdx; i < endIdx; i++) {
    IRecordInternal record=currentFoundset.getRecord(i);
    dataAdapterList.setRecord(record,false);
    Map<String,Object> rowProperties=new HashMap<String,Object>();
    rowProperties.put("String_Node_Str",record.getPKHashKey() + "String_Node_Str" + i);
    for (    WebComponent wc : components.values()) {
      List<String> dataproviders=getWebComponentPropertyType(wc,PropertyType.dataprovider);
      Map<String,Object> cellProperties=new HashMap<>();
      for (      String dataproviderID : dataproviders) {
        cellProperties.put(dataproviderID,wc.getProperty(dataproviderID));
      }
      Object valuelistObj;
      for (      String valuelistProperty : wc.getFormElement().getValuelistProperties()) {
        if ((valuelistObj=wc.getProperty(valuelistProperty)) instanceof IValueList) {
          IValueList valuelist=(IValueList)valuelistObj;
          if (valuelist.getValueList().getValueListType() == IValueListConstants.GLOBAL_METHOD_VALUES || valuelist.getValueList().getDatabaseValuesType() == IValueListConstants.RELATED_VALUES || valuelist.getFallbackValueList() != null)           cellProperties.put(valuelistProperty,new ValuelistWrapper(valuelist,record));
        }
      }
      cellProperties.put("String_Node_Str",wc.getName());
      rowProperties.put(wc.getName(),cellProperties);
    }
    List<TabSequencePropertyWithComponent> tabSeqComponents=getTabSeqComponents();
    for (    TabSequencePropertyWithComponent propertyWithComponent : tabSeqComponents) {
      Map<String,Object> cellProperties=(Map<String,Object>)rowProperties.get(propertyWithComponent.getComponent().getName());
      cellProperties.put(propertyWithComponent.getProperty(),currentIndex++);
    }
    rows.add(rowProperties);
  }
  dataAdapterList.setRecord(currentFoundset.getRecord(currentFoundset.getSelectedIndex()),false);
  return new RowData(rows,startIdx - foundsetStartRow,endIdx - foundsetStartRow);
}